ICU-6798 retag of milestone:4.1.4
X-SVN-Rev: 25632
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..d245f5b
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,197 @@
+* text=auto !eol
+
+*.c text !eol
+*.cc text !eol
+*.classpath text !eol
+*.cpp text !eol
+*.css text !eol
+*.dsp text !eol
+*.dsw text !eol
+*.filters text !eol
+*.h text !eol
+*.htm text !eol
+*.html text !eol
+*.in text !eol
+*.java text !eol
+*.launch text !eol
+*.mak text !eol
+*.md text !eol
+*.MF text !eol
+*.mk text !eol
+*.pl text !eol
+*.pm text !eol
+*.project text !eol
+*.properties text !eol
+*.py text !eol
+*.rc text !eol
+*.sh text eol=lf
+*.sln text !eol
+*.stub text !eol
+*.txt text !eol
+*.ucm text !eol
+*.vcproj text !eol
+*.vcxproj text !eol
+*.xml text !eol
+*.xsl text !eol
+*.xslt text !eol
+Makefile text !eol
+configure text !eol
+LICENSE text !eol
+README text !eol
+
+*.bin -text
+*.brk -text
+*.cnv -text
+*.icu -text
+*.res -text
+*.nrm -text
+*.spp -text
+*.tri2 -text
+
+/icu4c.css -text
+source/common/dtintrv.cpp -text
+source/common/mutex.cpp -text
+source/common/unicode/dtintrv.h -text
+source/config/gmakever.mk -text
+source/config/pkgdataMakefile.in -text
+source/data/coll/af.txt -text
+source/data/coll/af_NA.txt -text
+source/data/coll/af_ZA.txt -text
+source/data/coll/az.txt -text
+source/data/coll/az_Latn.txt -text
+source/data/coll/az_Latn_AZ.txt -text
+source/data/coll/bn_IN.txt -text
+source/data/coll/pa_Arab.txt -text
+source/data/coll/pa_Arab_PK.txt -text
+source/data/coll/pa_Guru.txt -text
+source/data/coll/pa_Guru_IN.txt -text
+source/data/coll/pa_IN.txt -text
+source/data/coll/si.txt -text
+source/data/coll/si_LK.txt -text
+source/data/coll/ur.txt -text
+source/data/coll/ur_IN.txt -text
+source/data/coll/ur_PK.txt -text
+source/data/icu4j-readme.txt -text
+source/data/locales/fr_SN.txt -text
+source/data/locales/ha.txt -text
+source/data/locales/ha_Latn.txt -text
+source/data/locales/ha_Latn_NG.txt -text
+source/data/locales/ha_NG.txt -text
+source/data/locales/ii.txt -text
+source/data/locales/ii_CN.txt -text
+source/data/locales/kk_Cyrl.txt -text
+source/data/locales/kk_Cyrl_KZ.txt -text
+source/data/locales/ne.txt -text
+source/data/locales/ne_IN.txt -text
+source/data/locales/ne_NP.txt -text
+source/data/locales/pa_Arab.txt -text
+source/data/locales/pa_Arab_PK.txt -text
+source/data/locales/pa_PK.txt -text
+source/data/locales/si.txt -text
+source/data/locales/si_LK.txt -text
+source/data/locales/zh_Hans_HK.txt -text
+source/data/locales/zh_Hans_MO.txt -text
+source/data/misc/likelySubtags.txt -text
+source/data/misc/numberingSystems.txt -text
+source/data/misc/plurals.txt -text
+source/data/pkgdataMakefile.in -text
+source/data/rbnf/af.txt -text
+source/data/rbnf/ca.txt -text
+source/data/rbnf/cs.txt -text
+source/data/rbnf/et.txt -text
+source/data/rbnf/fi.txt -text
+source/data/rbnf/fo.txt -text
+source/data/rbnf/hu.txt -text
+source/data/rbnf/hy.txt -text
+source/data/rbnf/is.txt -text
+source/data/rbnf/ka.txt -text
+source/data/rbnf/kl.txt -text
+source/data/rbnf/ko.txt -text
+source/data/rbnf/lt.txt -text
+source/data/rbnf/lv.txt -text
+source/data/rbnf/nb.txt -text
+source/data/rbnf/nn.txt -text
+source/data/rbnf/pt_PT.txt -text
+source/data/rbnf/ro.txt -text
+source/data/rbnf/sk.txt -text
+source/data/rbnf/sq.txt -text
+source/data/rbnf/tr.txt -text
+source/data/rbnf/vi.txt -text
+source/data/rbnf/zh.txt -text
+source/data/rbnf/zh_Hant.txt -text
+source/data/xml/collation/af.xml -text
+source/data/xml/collation/az.xml -text
+source/data/xml/collation/bn_IN.xml -text
+source/data/xml/collation/si.xml -text
+source/data/xml/collation/ur.xml -text
+source/data/xml/main/ha.xml -text
+source/data/xml/main/ha_Latn.xml -text
+source/data/xml/main/in.xml -text
+source/data/xml/main/kk_Cyrl.xml -text
+source/data/xml/main/ne.xml -text
+source/data/xml/main/pa_Arab.xml -text
+source/data/xml/main/pa_PK.xml -text
+source/data/xml/main/si.xml -text
+source/data/xml/main/zu.xml -text
+source/data/xml/rbnf/de.xml -text
+source/data/xml/rbnf/en.xml -text
+source/data/xml/rbnf/fr.xml -text
+source/data/xml/rbnf/ga.xml -text
+source/data/xml/rbnf/mt.xml -text
+source/data/xml/rbnf/root.xml -text
+source/extra/uconv/pkgdataMakefile.in -text
+source/extra/uconv/samples/ibm-37-test.txt -text
+source/i18n/currpinf.cpp -text
+source/i18n/dtitv_impl.h -text
+source/i18n/dtitvfmt.cpp -text
+source/i18n/dtitvinf.cpp -text
+source/i18n/numsys.cpp -text
+source/i18n/tmunit.cpp -text
+source/i18n/tmutamt.cpp -text
+source/i18n/tmutfmt.cpp -text
+source/i18n/unicode/currpinf.h -text
+source/i18n/unicode/dtitvfmt.h -text
+source/i18n/unicode/dtitvinf.h -text
+source/i18n/unicode/numsys.h -text
+source/i18n/unicode/tmunit.h -text
+source/i18n/unicode/tmutamt.h -text
+source/i18n/unicode/tmutfmt.h -text
+source/i18n/wintzimpl.cpp -text
+source/i18n/wintzimpl.h -text
+source/samples/layout/cgnomelayout.c -text
+source/samples/ucnv/data02.bin -text
+source/test/compat/tzone.pl -text
+source/test/intltest/dtifmtts.cpp -text
+source/test/intltest/dtifmtts.h -text
+source/test/intltest/tufmtts.cpp -text
+source/test/intltest/tufmtts.h -text
+source/test/perf/Makefile.in -text
+source/test/perf/README -text
+source/test/perf/strsrchperf/Makefile.in -text
+source/test/perf/strsrchperf/StrSrchPerf_r.pl -text
+source/test/perf/strsrchperf/strsrchperf.cpp -text
+source/test/perf/strsrchperf/strsrchperf.h -text
+source/test/perf/strsrchperf/strsrchperf.vcproj -text
+source/test/testdata/ConverterSelectorTestUTF16.txt -text
+source/test/testdata/TestFont1.otf -text
+source/test/testdata/icu26_testtypes.res -text
+source/test/testdata/icu26e_testtypes.res -text
+source/test/testdata/importtest.bin -text
+source/test/testdata/pkgdataMakefile.in -text
+source/test/testdata/uni-text.bin -text
+source/tools/pkgdata/pkgdata.cpp -text
+source/tools/toolutil/pkg_genc.c -text
+source/tools/toolutil/pkg_genc.h -text
+source/tools/toolutil/pkg_gencmn.c -text
+source/tools/toolutil/pkg_gencmn.h -text
+source/tools/toolutil/pkg_icu.cpp -text
+source/tools/toolutil/pkg_icu.h -text
+
+# The following file types are stored in Git-LFS.
+*.jar filter=lfs diff=lfs merge=lfs -text
+*.dat filter=lfs diff=lfs merge=lfs -text
+*.zip filter=lfs diff=lfs merge=lfs -text
+*.gz filter=lfs diff=lfs merge=lfs -text
+*.bz2 filter=lfs diff=lfs merge=lfs -text
+*.gif filter=lfs diff=lfs merge=lfs -text
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e1e19b7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,744 @@
+/bin
+/bin64
+/include
+/lib
+/lib64
+source/Doxyfile
+source/Makefile
+source/README
+source/allinone/*.ncb
+source/allinone/*.opt
+source/allinone/*.suo
+source/bin
+source/common/*.ao
+source/common/*.d
+source/common/*.o
+source/common/*.plg
+source/common/Debug
+source/common/Makefile
+source/common/Release
+source/common/common.res
+source/common/common.vcproj.*.*.user
+source/common/debug
+source/common/icucfg.h
+source/common/libicu*.*
+source/common/release
+source/common/svchook.mk
+source/common/unicode/platform.h
+source/common/x64
+source/common/x86
+source/config.cache
+source/config.log
+source/config.status
+source/config/Makefile.inc
+source/config/icu-config
+source/config/icu-config.1
+source/config/pkgdata.inc
+source/config/pkgdataMakefile
+source/data/*.plg
+source/data/Debug
+source/data/Makefile
+source/data/Release
+source/data/icupkg.inc
+source/data/in
+source/data/makedata.vcproj.*.*.user
+source/data/out
+source/data/pkgdataMakefile
+source/doc
+source/extra/Makefile
+source/extra/scrptrun/Makefile
+source/extra/uconv/*.d
+source/extra/uconv/*.o
+source/extra/uconv/Debug
+source/extra/uconv/Makefile
+source/extra/uconv/Release
+source/extra/uconv/debug
+source/extra/uconv/pkgdata.inc
+source/extra/uconv/pkgdataMakefile
+source/extra/uconv/pkgdatain.txt
+source/extra/uconv/release
+source/extra/uconv/resources/*.res
+source/extra/uconv/uconv
+source/extra/uconv/uconv.1
+source/extra/uconv/uconv.plg
+source/extra/uconv/uconv.vcproj.*.*.user
+source/extra/uconv/uconvmsg
+source/extra/uconv/x64
+source/extra/uconv/x86
+source/i18n/*.ao
+source/i18n/*.d
+source/i18n/*.o
+source/i18n/*.plg
+source/i18n/Debug
+source/i18n/Makefile
+source/i18n/Makefile.local
+source/i18n/Release
+source/i18n/debug
+source/i18n/i18n.res
+source/i18n/i18n.vcproj.*.*.user
+source/i18n/release
+source/i18n/x64
+source/i18n/x86
+source/icudefs.mk
+source/io/*.ao
+source/io/*.d
+source/io/*.o
+source/io/Debug
+source/io/Makefile
+source/io/Release
+source/io/debug
+source/io/io.res
+source/io/io.vcproj.*.*.user
+source/io/release
+source/io/x64
+source/io/x86
+source/layout/*.ao
+source/layout/*.d
+source/layout/*.o
+source/layout/*.pdb
+source/layout/Debug
+source/layout/Makefile
+source/layout/Release
+source/layout/debug
+source/layout/layout.res
+source/layout/layout.vcproj.*.*.user
+source/layout/release
+source/layout/x64
+source/layout/x86
+source/layoutex/*.ao
+source/layoutex/*.d
+source/layoutex/*.o
+source/layoutex/*.pdb
+source/layoutex/Debug
+source/layoutex/Makefile
+source/layoutex/Release
+source/layoutex/debug
+source/layoutex/layoutex.res
+source/layoutex/layoutex.vcproj.*.*.user
+source/layoutex/release
+source/layoutex/x64
+source/layoutex/x86
+source/lib
+source/samples/Makefile
+source/samples/all/all.ncb
+source/samples/all/all.suo
+source/samples/break/Debug
+source/samples/break/break.vcproj.*.*.user
+source/samples/break/release
+source/samples/cal/*.d
+source/samples/cal/*.pdb
+source/samples/cal/Debug
+source/samples/cal/Makefile
+source/samples/cal/Release
+source/samples/cal/cal.vcproj.*.*.user
+source/samples/cal/icucal
+source/samples/cal/icucal.exe
+source/samples/cal/release
+source/samples/case/Debug
+source/samples/case/case.vcproj.*.*.user
+source/samples/case/release
+source/samples/citer/Debug
+source/samples/citer/citer.vcproj.*.*.user
+source/samples/citer/release
+source/samples/coll/Debug
+source/samples/coll/coll.vcproj.*.*.user
+source/samples/coll/release
+source/samples/csdet/Debug
+source/samples/csdet/Makefile
+source/samples/csdet/csdet.vcproj.*.*.user
+source/samples/csdet/release
+source/samples/date/*.d
+source/samples/date/*.pdb
+source/samples/date/Debug
+source/samples/date/Makefile
+source/samples/date/Release
+source/samples/date/date.vcproj.*.*.user
+source/samples/date/icudate
+source/samples/date/icudate.exe
+source/samples/date/release
+source/samples/datefmt/Debug
+source/samples/datefmt/datefmt.vcproj.*.*.user
+source/samples/datefmt/release
+source/samples/layout/*.d
+source/samples/layout/*.pdb
+source/samples/layout/Debug
+source/samples/layout/Makefile
+source/samples/layout/Release
+source/samples/layout/layout.vcproj.*.*.user
+source/samples/layout/release
+source/samples/layout/tmp
+source/samples/legacy/Debug
+source/samples/legacy/legacy.vcproj.*.*.user
+source/samples/legacy/release
+source/samples/msgfmt/Debug
+source/samples/msgfmt/msgfmt.vcproj.*.*.user
+source/samples/msgfmt/release
+source/samples/numfmt/Debug
+source/samples/numfmt/numfmt.vcproj.*.*.user
+source/samples/numfmt/release
+source/samples/props/Debug
+source/samples/props/props.vcproj.*.*.user
+source/samples/props/release
+source/samples/strsrch/Debug
+source/samples/strsrch/release
+source/samples/strsrch/strsrch.vcproj.*.*.user
+source/samples/translit/Debug
+source/samples/translit/release
+source/samples/translit/translit.vcproj.*.*.user
+source/samples/uciter8/Debug
+source/samples/uciter8/release
+source/samples/uciter8/uciter8.vcproj.*.*.user
+source/samples/ucnv/Debug
+source/samples/ucnv/convsamp
+source/samples/ucnv/convsamp.out
+source/samples/ucnv/release
+source/samples/ucnv/ucnv.vcproj.*.*.user
+source/samples/udata/Debug
+source/samples/udata/reader.vcproj.*.*.user
+source/samples/udata/reader_Win32_Debug
+source/samples/udata/reader_win32_release
+source/samples/udata/release
+source/samples/udata/writer.vcproj.*.*.user
+source/samples/ufortune/Debug
+source/samples/ufortune/Release
+source/samples/ufortune/ufortune.vcproj.*.*.user
+source/samples/ugrep/debug
+source/samples/ugrep/release
+source/samples/ugrep/ugrep.vcproj.*.*.user
+source/samples/uresb/Debug
+source/samples/uresb/release
+source/samples/uresb/resources.vcproj.*.*.user
+source/samples/uresb/uresb.vcproj.*.*.user
+source/samples/ustring/Debug
+source/samples/ustring/release
+source/samples/ustring/ustring.vcproj.*.*.user
+source/stubdata/*.ao
+source/stubdata/*.d
+source/stubdata/*.o
+source/stubdata/*.plg
+source/stubdata/Debug
+source/stubdata/Makefile
+source/stubdata/Release
+source/stubdata/cygicudt*.*
+source/stubdata/debug
+source/stubdata/libicu*.*
+source/stubdata/libsicu*.*
+source/stubdata/release
+source/stubdata/stubdata.vcproj.*.*.user
+source/stubdata/stubdatabuilt.txt
+source/stubdata/x64
+source/stubdata/x86
+source/test/Makefile
+source/test/cintltst/*.d
+source/test/cintltst/*.o
+source/test/cintltst/*.plg
+source/test/cintltst/Debug
+source/test/cintltst/Makefile
+source/test/cintltst/Release
+source/test/cintltst/cintltst
+source/test/cintltst/cintltst.exe
+source/test/cintltst/cintltst.vcproj.*.*.user
+source/test/cintltst/debug
+source/test/cintltst/release
+source/test/cintltst/x64
+source/test/cintltst/x86
+source/test/compat/Makefile
+source/test/hdrtst/Makefile
+source/test/intltest/*.d
+source/test/intltest/*.o
+source/test/intltest/*.plg
+source/test/intltest/Debug
+source/test/intltest/Makefile
+source/test/intltest/Makefile.local
+source/test/intltest/Release
+source/test/intltest/debug
+source/test/intltest/intltest
+source/test/intltest/intltest.exe
+source/test/intltest/intltest.vcproj.*.*.user
+source/test/intltest/release
+source/test/intltest/x64
+source/test/intltest/x86
+source/test/iotest/*.d
+source/test/iotest/*.o
+source/test/iotest/Debug
+source/test/iotest/Makefile
+source/test/iotest/Release
+source/test/iotest/debug
+source/test/iotest/iotest
+source/test/iotest/iotest.exe
+source/test/iotest/iotest.vcproj.*.*.user
+source/test/iotest/release
+source/test/iotest/x64
+source/test/iotest/x86
+source/test/letest/*.d
+source/test/letest/*.o
+source/test/letest/Debug
+source/test/letest/Makefile
+source/test/letest/Release
+source/test/letest/debug
+source/test/letest/letest
+source/test/letest/letest.exe
+source/test/letest/letest.vcproj.*.*.user
+source/test/letest/release
+source/test/letest/x64
+source/test/letest/x86
+source/test/perf/Makefile
+source/test/perf/charperf/*.d
+source/test/perf/charperf/*.o
+source/test/perf/charperf/Debug
+source/test/perf/charperf/Makefile
+source/test/perf/charperf/Release
+source/test/perf/charperf/charperf
+source/test/perf/charperf/charperf.vcproj.*.*.user
+source/test/perf/charperf/debug
+source/test/perf/charperf/release
+source/test/perf/collationperf/Makefile
+source/test/perf/collperf/*.d
+source/test/perf/collperf/*.o
+source/test/perf/collperf/Debug
+source/test/perf/collperf/Makefile
+source/test/perf/collperf/Release
+source/test/perf/collperf/collperf
+source/test/perf/collperf/collperf.vcproj.*.*.user
+source/test/perf/collperf/debug
+source/test/perf/collperf/release
+source/test/perf/convperf/Makefile
+source/test/perf/convperf/convperf.vcproj.*.*.user
+source/test/perf/convperf/debug
+source/test/perf/convperf/release
+source/test/perf/normperf/*.d
+source/test/perf/normperf/*.o
+source/test/perf/normperf/Debug
+source/test/perf/normperf/Makefile
+source/test/perf/normperf/Release
+source/test/perf/normperf/debug
+source/test/perf/normperf/normperf
+source/test/perf/normperf/normperf.vcproj.*.*.user
+source/test/perf/normperf/release
+source/test/perf/perf.ncb
+source/test/perf/perf.suo
+source/test/perf/strsrchperf/Makefile
+source/test/perf/ubrkperf/*.d
+source/test/perf/ubrkperf/*.o
+source/test/perf/ubrkperf/Debug
+source/test/perf/ubrkperf/Makefile
+source/test/perf/ubrkperf/Release
+source/test/perf/ubrkperf/debug
+source/test/perf/ubrkperf/release
+source/test/perf/ubrkperf/ubrkperf
+source/test/perf/ubrkperf/ubrkperf.vcproj.*.*.user
+source/test/perf/unisetperf/*.d
+source/test/perf/unisetperf/*.o
+source/test/perf/unisetperf/Debug
+source/test/perf/unisetperf/Makefile
+source/test/perf/unisetperf/Release
+source/test/perf/unisetperf/debug
+source/test/perf/unisetperf/release
+source/test/perf/unisetperf/unisetperf
+source/test/perf/unisetperf/unisetperf.vcproj.*.*.user
+source/test/perf/usetperf/*.d
+source/test/perf/usetperf/*.o
+source/test/perf/usetperf/Debug
+source/test/perf/usetperf/Makefile
+source/test/perf/usetperf/Release
+source/test/perf/usetperf/debug
+source/test/perf/usetperf/release
+source/test/perf/usetperf/usetperf
+source/test/perf/usetperf/usetperf.vcproj.*.*.user
+source/test/perf/ustrperf/*.d
+source/test/perf/ustrperf/*.o
+source/test/perf/ustrperf/Debug
+source/test/perf/ustrperf/Makefile
+source/test/perf/ustrperf/Release
+source/test/perf/ustrperf/charperf
+source/test/perf/ustrperf/debug
+source/test/perf/ustrperf/release
+source/test/perf/ustrperf/stringperf.vcproj.*.*.user
+source/test/perf/utfperf/*.d
+source/test/perf/utfperf/*.o
+source/test/perf/utfperf/Debug
+source/test/perf/utfperf/Makefile
+source/test/perf/utfperf/Release
+source/test/perf/utfperf/debug
+source/test/perf/utfperf/release
+source/test/perf/utfperf/utfperf
+source/test/perf/utfperf/utfperf.vcproj.*.*.user
+source/test/perf/utrie2perf/Makefile
+source/test/testdata/Makefile
+source/test/testdata/out
+source/test/testdata/pkgdata.inc
+source/test/testdata/pkgdataMakefile
+source/test/testmap/*.d
+source/test/testmap/Debug
+source/test/testmap/Makefile
+source/test/testmap/Release
+source/test/testmap/testmap
+source/test/testmap/testmap.plg
+source/test/thaitest/Makefile
+source/test/threadtest/Makefile
+source/tools/Makefile
+source/tools/ctestfw/*.ao
+source/tools/ctestfw/*.d
+source/tools/ctestfw/*.o
+source/tools/ctestfw/*.pdb
+source/tools/ctestfw/*icutest*.dll
+source/tools/ctestfw/*icutest*.exp
+source/tools/ctestfw/*icutest*.lib
+source/tools/ctestfw/*icutest*.lnk
+source/tools/ctestfw/Debug
+source/tools/ctestfw/Makefile
+source/tools/ctestfw/Release
+source/tools/ctestfw/ctestfw.vcproj.*.*.user
+source/tools/ctestfw/debug
+source/tools/ctestfw/libicutest*
+source/tools/ctestfw/libsicutest*
+source/tools/ctestfw/release
+source/tools/ctestfw/x64
+source/tools/ctestfw/x86
+source/tools/dumpce/*.css
+source/tools/dumpce/*.d
+source/tools/dumpce/*.html
+source/tools/dumpce/*.o
+source/tools/dumpce/Makefile
+source/tools/dumpce/dumpce
+source/tools/genbidi/*.d
+source/tools/genbidi/*.o
+source/tools/genbidi/*.pdb
+source/tools/genbidi/*.plg
+source/tools/genbidi/Debug
+source/tools/genbidi/Makefile
+source/tools/genbidi/Release
+source/tools/genbidi/debug
+source/tools/genbidi/genbidi
+source/tools/genbidi/genbidi.[0-9]
+source/tools/genbidi/genbidi.vcproj.*.*.user
+source/tools/genbidi/release
+source/tools/genbidi/x64
+source/tools/genbidi/x86
+source/tools/genbrk/*.d
+source/tools/genbrk/*.o
+source/tools/genbrk/*.pdb
+source/tools/genbrk/*.plg
+source/tools/genbrk/Debug
+source/tools/genbrk/Makefile
+source/tools/genbrk/Release
+source/tools/genbrk/debug
+source/tools/genbrk/genbrk
+source/tools/genbrk/genbrk.1
+source/tools/genbrk/genbrk.vcproj.*.*.user
+source/tools/genbrk/release
+source/tools/genbrk/x64
+source/tools/genbrk/x86
+source/tools/gencase/*.d
+source/tools/gencase/*.ncb
+source/tools/gencase/*.o
+source/tools/gencase/*.opt
+source/tools/gencase/*.pdb
+source/tools/gencase/*.plg
+source/tools/gencase/Debug
+source/tools/gencase/Makefile
+source/tools/gencase/Release
+source/tools/gencase/debug
+source/tools/gencase/gencase
+source/tools/gencase/gencase.[0-9]
+source/tools/gencase/gencase.vcproj.*.*.user
+source/tools/gencase/release
+source/tools/gencase/x64
+source/tools/gencase/x86
+source/tools/genccode/*.d
+source/tools/genccode/*.o
+source/tools/genccode/*.pdb
+source/tools/genccode/*.plg
+source/tools/genccode/Debug
+source/tools/genccode/Makefile
+source/tools/genccode/Release
+source/tools/genccode/debug
+source/tools/genccode/genccode
+source/tools/genccode/genccode.8
+source/tools/genccode/genccode.vcproj.*.*.user
+source/tools/genccode/release
+source/tools/genccode/x64
+source/tools/genccode/x86
+source/tools/gencmn/*.d
+source/tools/gencmn/*.o
+source/tools/gencmn/*.pdb
+source/tools/gencmn/*.plg
+source/tools/gencmn/Debug
+source/tools/gencmn/Makefile
+source/tools/gencmn/Release
+source/tools/gencmn/debug
+source/tools/gencmn/gencmn
+source/tools/gencmn/gencmn.8
+source/tools/gencmn/gencmn.[0-9]
+source/tools/gencmn/gencmn.vcproj.*.*.user
+source/tools/gencmn/release
+source/tools/gencmn/x64
+source/tools/gencmn/x86
+source/tools/gencnval/*.d
+source/tools/gencnval/*.ncb
+source/tools/gencnval/*.o
+source/tools/gencnval/*.opt
+source/tools/gencnval/*.pdb
+source/tools/gencnval/*.plg
+source/tools/gencnval/Debug
+source/tools/gencnval/Makefile
+source/tools/gencnval/Release
+source/tools/gencnval/debug
+source/tools/gencnval/gencnval
+source/tools/gencnval/gencnval.1
+source/tools/gencnval/gencnval.[0-9]
+source/tools/gencnval/gencnval.vcproj.*.*.user
+source/tools/gencnval/release
+source/tools/gencnval/x64
+source/tools/gencnval/x86
+source/tools/genctd/*.d
+source/tools/genctd/*.o
+source/tools/genctd/*.pdb
+source/tools/genctd/*.plg
+source/tools/genctd/Debug
+source/tools/genctd/Makefile
+source/tools/genctd/Release
+source/tools/genctd/debug
+source/tools/genctd/genctd
+source/tools/genctd/genctd.1
+source/tools/genctd/genctd.vcproj.*.*.user
+source/tools/genctd/release
+source/tools/genctd/x64
+source/tools/genctd/x86
+source/tools/gendraft/udeprctd.h
+source/tools/gendraft/udraft.h
+source/tools/gendraft/uintrnal.h
+source/tools/gendraft/usystem.h
+source/tools/gennames/*.d
+source/tools/gennames/*.ncb
+source/tools/gennames/*.o
+source/tools/gennames/*.opt
+source/tools/gennames/*.pdb
+source/tools/gennames/*.plg
+source/tools/gennames/Debug
+source/tools/gennames/Makefile
+source/tools/gennames/Release
+source/tools/gennames/debug
+source/tools/gennames/gennames
+source/tools/gennames/gennames.[0-9]
+source/tools/gennames/gennames.vcproj.*.*.user
+source/tools/gennames/release
+source/tools/gennames/x64
+source/tools/gennames/x86
+source/tools/gennorm/*.d
+source/tools/gennorm/*.o
+source/tools/gennorm/*.pdb
+source/tools/gennorm/*.plg
+source/tools/gennorm/Debug
+source/tools/gennorm/Makefile
+source/tools/gennorm/Release
+source/tools/gennorm/debug
+source/tools/gennorm/gennorm
+source/tools/gennorm/gennorm.[0-9]
+source/tools/gennorm/gennorm.vcproj.*.*.user
+source/tools/gennorm/release
+source/tools/gennorm/x64
+source/tools/gennorm/x86
+source/tools/genpname/*.d
+source/tools/genpname/*.o
+source/tools/genpname/*.pdb
+source/tools/genpname/*.plg
+source/tools/genpname/Debug
+source/tools/genpname/Makefile
+source/tools/genpname/Release
+source/tools/genpname/debug
+source/tools/genpname/genpname
+source/tools/genpname/genpname.vcproj.*.*.user
+source/tools/genpname/release
+source/tools/genpname/x64
+source/tools/genpname/x86
+source/tools/genprops/*.d
+source/tools/genprops/*.ncb
+source/tools/genprops/*.o
+source/tools/genprops/*.opt
+source/tools/genprops/*.pdb
+source/tools/genprops/*.plg
+source/tools/genprops/Debug
+source/tools/genprops/Makefile
+source/tools/genprops/Release
+source/tools/genprops/debug
+source/tools/genprops/genprops
+source/tools/genprops/genprops.[0-9]
+source/tools/genprops/genprops.vcproj.*.*.user
+source/tools/genprops/release
+source/tools/genprops/x64
+source/tools/genprops/x86
+source/tools/genrb/*.1
+source/tools/genrb/*.d
+source/tools/genrb/*.o
+source/tools/genrb/*.pdb
+source/tools/genrb/*.plg
+source/tools/genrb/Debug
+source/tools/genrb/Makefile
+source/tools/genrb/Makefile.local
+source/tools/genrb/Release
+source/tools/genrb/debug
+source/tools/genrb/derb
+source/tools/genrb/derb.[0-9]
+source/tools/genrb/derb.vcproj.*.*.user
+source/tools/genrb/derb_*
+source/tools/genrb/genrb
+source/tools/genrb/genrb.[0-9]
+source/tools/genrb/genrb.vcproj.*.*.user
+source/tools/genrb/release
+source/tools/genrb/temp
+source/tools/genrb/x64
+source/tools/genrb/x86
+source/tools/genren/ICUunrenamed
+source/tools/genren/Makefile.local
+source/tools/genren/urename.*
+source/tools/gensprep/*.8
+source/tools/gensprep/*.d
+source/tools/gensprep/*.o
+source/tools/gensprep/*.pdb
+source/tools/gensprep/Debug
+source/tools/gensprep/Makefile
+source/tools/gensprep/Release
+source/tools/gensprep/debug
+source/tools/gensprep/gensprep
+source/tools/gensprep/gensprep.[0-9]
+source/tools/gensprep/gensprep.plg
+source/tools/gensprep/gensprep.vcproj.*.*.user
+source/tools/gensprep/release
+source/tools/gensprep/x64
+source/tools/gensprep/x86
+source/tools/gentest/*.d
+source/tools/gentest/*.o
+source/tools/gentest/*.pdb
+source/tools/gentest/Debug
+source/tools/gentest/Makefile
+source/tools/gentest/Release
+source/tools/gentest/debug
+source/tools/gentest/gentest
+source/tools/gentest/gentest.exe
+source/tools/gentest/gentest.vcproj.*.*.user
+source/tools/gentest/release
+source/tools/gentest/x64
+source/tools/gentest/x86
+source/tools/genuca/*.d
+source/tools/genuca/*.o
+source/tools/genuca/*.pdb
+source/tools/genuca/Debug
+source/tools/genuca/Makefile
+source/tools/genuca/Release
+source/tools/genuca/debug
+source/tools/genuca/genuca
+source/tools/genuca/genuca.8
+source/tools/genuca/genuca.vcproj.*.*.user
+source/tools/genuca/release
+source/tools/genuca/x64
+source/tools/genuca/x86
+source/tools/icupkg/*.8
+source/tools/icupkg/*.d
+source/tools/icupkg/*.ncb
+source/tools/icupkg/*.o
+source/tools/icupkg/*.opt
+source/tools/icupkg/*.pdb
+source/tools/icupkg/*.plg
+source/tools/icupkg/Debug
+source/tools/icupkg/Makefile
+source/tools/icupkg/Release
+source/tools/icupkg/debug
+source/tools/icupkg/icupkg
+source/tools/icupkg/icupkg.[0-9]
+source/tools/icupkg/icupkg.vcproj.*.*.user
+source/tools/icupkg/release
+source/tools/icupkg/x64
+source/tools/icupkg/x86
+source/tools/icuswap/*.d
+source/tools/icuswap/*.ncb
+source/tools/icuswap/*.o
+source/tools/icuswap/*.opt
+source/tools/icuswap/*.pdb
+source/tools/icuswap/*.plg
+source/tools/icuswap/Debug
+source/tools/icuswap/Makefile
+source/tools/icuswap/Release
+source/tools/icuswap/debug
+source/tools/icuswap/icuswap
+source/tools/icuswap/icuswap.[0-9]
+source/tools/icuswap/icuswap.vcproj.*.*.user
+source/tools/icuswap/release
+source/tools/makeconv/*.1
+source/tools/makeconv/*.d
+source/tools/makeconv/*.o
+source/tools/makeconv/*.pdb
+source/tools/makeconv/*.plg
+source/tools/makeconv/Debug
+source/tools/makeconv/Makefile
+source/tools/makeconv/Release
+source/tools/makeconv/debug
+source/tools/makeconv/makeconv
+source/tools/makeconv/makeconv.[0-9]
+source/tools/makeconv/makeconv.vcproj.*.*.user
+source/tools/makeconv/release
+source/tools/makeconv/x64
+source/tools/makeconv/x86
+source/tools/pkgdata/*.1
+source/tools/pkgdata/*.d
+source/tools/pkgdata/*.ncb
+source/tools/pkgdata/*.o
+source/tools/pkgdata/*.opt
+source/tools/pkgdata/*.pdb
+source/tools/pkgdata/Debug
+source/tools/pkgdata/Makefile
+source/tools/pkgdata/Release
+source/tools/pkgdata/debug
+source/tools/pkgdata/icupkg.inc
+source/tools/pkgdata/pkgdata
+source/tools/pkgdata/pkgdata.[0-9]
+source/tools/pkgdata/pkgdata.vcproj.*.*.user
+source/tools/pkgdata/release
+source/tools/pkgdata/x64
+source/tools/pkgdata/x86
+source/tools/toolutil/*.d
+source/tools/toolutil/*.ncb
+source/tools/toolutil/*.o
+source/tools/toolutil/*.opt
+source/tools/toolutil/*.pdb
+source/tools/toolutil/*.plg
+source/tools/toolutil/Debug
+source/tools/toolutil/Makefile
+source/tools/toolutil/Release
+source/tools/toolutil/debug
+source/tools/toolutil/libicu*
+source/tools/toolutil/release
+source/tools/toolutil/toolutil.vcproj.*.*.user
+source/tools/toolutil/x64
+source/tools/toolutil/x86
+source/tools/tzcode/Makefile
+source/tools/tzcode/ZoneMetaData.java
+source/tools/tzcode/africa
+source/tools/tzcode/antarctica
+source/tools/tzcode/asia
+source/tools/tzcode/australasia
+source/tools/tzcode/backward
+source/tools/tzcode/etcetera
+source/tools/tzcode/europe
+source/tools/tzcode/factory
+source/tools/tzcode/icu_zone.txt
+source/tools/tzcode/icuzdump
+source/tools/tzcode/icuzdump.dSYM
+source/tools/tzcode/icuzdumpout
+source/tools/tzcode/iso3166.tab
+source/tools/tzcode/leapseconds
+source/tools/tzcode/northamerica
+source/tools/tzcode/pacificnew
+source/tools/tzcode/solar??
+source/tools/tzcode/southamerica
+source/tools/tzcode/systemv
+source/tools/tzcode/tz2icu
+source/tools/tzcode/tz?????????.tar.gz
+source/tools/tzcode/tzorig
+source/tools/tzcode/yearistype
+source/tools/tzcode/yearistype.sh
+source/tools/tzcode/zdumpout
+source/tools/tzcode/zic
+source/tools/tzcode/zone.tab
+source/tools/tzcode/zoneinfo
+source/tools/tzcode/zoneinfo.txt
diff --git a/APIChangeReport.html b/APIChangeReport.html
new file mode 100644
index 0000000..b953c27
--- /dev/null
+++ b/APIChangeReport.html
@@ -0,0 +1,3457 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ Copyright (C) 2009, International Business Machines Corporation, All Rights Reserved.
+ --><html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ICU4C API Comparison: 4.0.1 with 4.2 (4.1.4 / M4)</title>
+<link type="text/css" href="icu4c.css" rel="stylesheet">
+</head>
+<body>
+<a name="_top"></a>
+<h1>ICU4C API Comparison: 4.0.1 with 4.2 (4.1.4 / M4)</h1>
+<ul>
+<li>
+<a href="#removed">Removed from 4.0.1</a>
+</li>
+<li>
+<a href="#deprecated">Deprecated or Obsoleted in 4.2</a>
+</li>
+<li>
+<a href="#changed">Changed in 4.2</a>
+</li>
+<li>
+<a href="#promoted">Promoted to stable in 4.2</a>
+</li>
+<li>
+<a href="#added">Added in 4.2</a>
+</li>
+<li>
+<a href="#other">Other existing drafts in 4.2</a>
+</li>
+</ul>
+<hr>
+<a name="removed">
+<h2>Removed from 4.0.1</h2>
+</a>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>4.0.1</th><th>4.2</th>
+</tr>
+</THEAD>
+<tr class="row1">
+<td class="file">datefmt.h</td><td class="proto">static DateFormat* DateFormat::createPatternInstance(const UnicodeString &skeleton, const Locale &locale, UErrorCode &status)</td><td class="">Internal<br>4.0</td><td>None<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData, int32_t dataLength, const char *codepage=0)</td><td class="stabchange">Stable<br>2.0</td><td>None<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">int32_t UnicodeString::extract(int32_t start, int32_t startLength, char *target, uint32_t targetLength, const char *codepage=0) const</td><td class="stabchange">Stable<br>2.0</td><td>None<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData, const char *codepage=0)</td><td class="stabchange">Stable<br>2.0</td><td>None<br>
+<span class=""><span></span></span></td>
+</tr>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="deprecated">
+<h2>Deprecated or Obsoleted in 4.2</h2>
+</a>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>4.0.1</th><th>4.2</th>
+</tr>
+</THEAD>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="changed">
+<h2>Changed in 4.2 (old, new)</h2>
+</a>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>4.0.1</th><th>4.2</th>
+</tr>
+</THEAD>
+<tr class="row1">
+<td class="file">bmsearch.h</td><td class="proto">UClassID BoyerMooreSearch::getDynamicClassID() const</td><td class="">Internal<br>4.0.1 technology preview</td><td>
+<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">bmsearch.h</td><td class="proto">static UClassID BoyerMooreSearch::getStaticClassID()</td><td class="">Internal<br>4.0.1 technology preview</td><td>
+<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">colldata.h</td><td class="proto">UClassID CollData::getDynamicClassID() const</td><td class="">Internal<br>4.0.1 technology preview</td><td>
+<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">colldata.h</td><td class="proto">static UClassID StringList::getStaticClassID()</td><td class="">Internal<br>4.0.1 technology preview</td><td>
+<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">colldata.h</td><td class="proto">static UClassID CollData::getStaticClassID()</td><td class="">Internal<br>4.0.1 technology preview</td><td>
+<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">colldata.h</td><td class="proto">UClassID CEList::getDynamicClassID() const</td><td class="">Internal<br>4.0.1 technology preview</td><td>
+<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">colldata.h</td><td class="proto">static UClassID CEList::getStaticClassID()</td><td class="">Internal<br>4.0.1 technology preview</td><td>
+<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">colldata.h</td><td class="proto">UClassID StringList::getDynamicClassID() const</td><td class="">Internal<br>4.0.1 technology preview</td><td>
+<br>
+<span class=""><span></span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval::DateInterval(UDate fromDate, UDate toDate)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval& DateInterval::operator=(const DateInterval &)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">UDate DateInterval::getToDate() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">UBool DateInterval::operator==(const DateInterval &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval::DateInterval(const DateInterval &other)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">UDate DateInterval::getFromDate() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">UBool DateInterval::operator!=(const DateInterval &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval* DateInterval::clone() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">UClassID DateInterval::getDynamicClassID(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">static UClassID DateInterval::getStaticClassID(void)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval::~DateInterval()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">const DateIntervalInfo* DateIntervalFormat::getDateIntervalInfo(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &skeleton, const Locale &locale, const DateIntervalInfo &dtitvinf, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">DateIntervalFormat::~DateIntervalFormat()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &skeleton, const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">UBool DateIntervalFormat::operator!=(const Format &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">void DateIntervalFormat::setDateIntervalInfo(const DateIntervalInfo &newIntervalPatterns, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">const DateFormat* DateIntervalFormat::getDateFormat(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">UClassID DateIntervalFormat::getDynamicClassID(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">UnicodeString& DateIntervalFormat::format(Calendar &fromCalendar, Calendar &toCalendar, UnicodeString &appendTo, FieldPosition &fieldPosition, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &skeleton, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">Format* DateIntervalFormat::clone(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">UBool DateIntervalFormat::operator==(const Format &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &skeleton, const DateIntervalInfo &dtitvinf, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">UnicodeString& DateIntervalFormat::format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &fieldPosition, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">static UClassID DateIntervalFormat::getStaticClassID(void)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">UnicodeString& DateIntervalFormat::format(const DateInterval *dtInterval, UnicodeString &appendTo, FieldPosition &fieldPosition, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">void DateIntervalInfo::setFallbackIntervalPattern(const UnicodeString &fallbackPattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">void DateIntervalInfo::setIntervalPattern(const UnicodeString &skeleton, UCalendarDateFields lrgDiffCalUnit, const UnicodeString &intervalPattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo::DateIntervalInfo(const DateIntervalInfo &)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo::~DateIntervalInfo()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo::DateIntervalInfo(const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">UnicodeString& DateIntervalInfo::getIntervalPattern(const UnicodeString &skeleton, UCalendarDateFields field, UnicodeString &result, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">UnicodeString& DateIntervalInfo::getFallbackIntervalPattern(UnicodeString &result) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">UBool DateIntervalInfo::getDefaultOrder() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo& DateIntervalInfo::operator=(const DateIntervalInfo &)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo* DateIntervalInfo::clone(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">msgfmt.h</td><td class="proto">Format* MessageFormat::getFormat(const UnicodeString &formatName, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">msgfmt.h</td><td class="proto">StringEnumeration* MessageFormat::getFormatNames(UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">msgfmt.h</td><td class="proto">void MessageFormat::adoptFormat(const UnicodeString &formatName, Format *formatToAdopt, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">msgfmt.h</td><td class="proto">void MessageFormat::setFormat(const UnicodeString &formatName, const Format &format, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">msgfmt.h</td><td class="proto">UBool MessageFormat::usesNamedArguments() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString& PluralFormat::format(int32_t number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">Format* PluralFormat::clone(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UClassID PluralFormat::getDynamicClassID() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const Locale &locale, const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString PluralFormat::format(double number, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString PluralFormat::format(int32_t number, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString& PluralFormat::format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const PluralFormat &other)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat& PluralFormat::operator=(const PluralFormat &other)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">UBool PluralFormat::operator==(const Format &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">void PluralFormat::setLocale(const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">void PluralFormat::applyPattern(const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::~PluralFormat()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const PluralRules &rules, const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const Locale &locale, const PluralRules &rules, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">void PluralFormat::setNumberFormat(const NumberFormat *format, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString& PluralFormat::toPattern(UnicodeString &appendTo)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">UBool PluralFormat::operator!=(const Format &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const Locale &locale, const PluralRules &rules, const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">static UClassID PluralFormat::getStaticClassID(void)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">void PluralFormat::parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString& PluralFormat::format(double number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const PluralRules &rules, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">static UClassID PluralRules::getStaticClassID(void)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">UClassID PluralRules::getDynamicClassID() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">PluralRules::PluralRules(UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">UnicodeString PluralRules::select(double number) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">UBool PluralRules::operator!=(const PluralRules &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">PluralRules::~PluralRules()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">UBool PluralRules::isKeyword(const UnicodeString &keyword) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">static PluralRules* PluralRules::createRules(const UnicodeString &description, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">UBool PluralRules::operator==(const PluralRules &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">static PluralRules* PluralRules::createDefaultRules(UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">StringEnumeration* PluralRules::getKeywords(UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">PluralRules* PluralRules::clone() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">PluralRules::PluralRules(const PluralRules &other)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">static PluralRules* PluralRules::forLocale(const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">UnicodeString PluralRules::select(int32_t number) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">PluralRules& PluralRules::operator=(const PluralRules &)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">UBool RegexMatcher::hasAnchoringBounds() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">UBool RegexMatcher::requireEnd() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">RegexMatcher& RegexMatcher::useTransparentBounds(UBool b)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">void RegexMatcher::setStackLimit(int32_t limit, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">int32_t RegexMatcher::regionEnd() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">void RegexMatcher::setMatchCallback(URegexMatchCallback *callback, const void *context, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">RegexMatcher& RegexMatcher::region(int32_t start, int32_t limit, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">int32_t RegexMatcher::getTimeLimit() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">int32_t RegexMatcher::getStackLimit() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">int32_t RegexMatcher::regionStart() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">void RegexMatcher::getMatchCallback(URegexMatchCallback *&callback, const void *&context, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">UBool RegexMatcher::hasTransparentBounds() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">RegexMatcher& RegexMatcher::useAnchoringBounds(UBool b)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">UBool RegexMatcher::hitEnd() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">void RegexMatcher::setTimeLimit(int32_t limit, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">timezone.h</td><td class="proto">static UnicodeString& TimeZone::getCanonicalID(const UnicodeString &id, UnicodeString &canonicalID, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">timezone.h</td><td class="proto">static UnicodeString& TimeZone::getCanonicalID(const UnicodeString &id, UnicodeString &canonicalID, UBool &isSystemID, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">static UBool hashTableValueComparator(UHashTok val1, UHashTok val2)</td><td class="">Internal<br>4.0</td><td>Internal<br>
+<span class="verchange"><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ucal.h</td><td class="proto">UCalendar* ucal_clone(const UCalendar *cal, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ucal.h</td><td class="proto">int32_t ucal_getCanonicalTimeZoneID(const UChar *id, int32_t len, UChar *result, int32_t resultCapacity, UBool *isSystemID, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ucurr.h</td><td class="proto">int32_t ucurr_forLocaleAndDate(const char *locale, UDate date, int32_t index, UChar *buff, int32_t buffCapacity, UErrorCode *ec)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ucurr.h</td><td class="proto">int32_t ucurr_countCurrencies(const char *locale, UDate date, UErrorCode *ec)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uloc.h</td><td class="proto">int32_t uloc_minimizeSubtags(const char *localeID, char *minimizedLocaleID, int32_t minimizedLocaleIDCapacity, UErrorCode *err)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uloc.h</td><td class="proto">ULayoutType uloc_getCharacterOrientation(const char *localeId, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uloc.h</td><td class="proto">int32_t uloc_addLikelySubtags(const char *localeID, char *maximizedLocaleID, int32_t maximizedLocaleIDCapacity, UErrorCode *err)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uloc.h</td><td class="proto">ULayoutType uloc_getLineOrientation(const char *localeId, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uniset.h</td><td class="proto">UnicodeSet& UnicodeSet::removeAllStrings()</td><td class="">Internal<br>.</td><td>Draft<br>
+<span class="verchange"><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uniset.h</td><td class="proto">UnicodeSet& UnicodeSet::closeOver(int32_t attribute)</td><td class="">Internal<br>.</td><td>Draft<br>
+<span class="verchange"><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uniset.h</td><td class="proto">UBool UnicodeSet::isBogus(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uniset.h</td><td class="proto">void UnicodeSet::setToBogus()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">UBool uregex_hasAnchoringBounds(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">UBool uregex_requireEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">void uregex_getMatchCallback(const URegularExpression *regexp, URegexMatchCallback **callback, const void **context, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">UBool uregex_hasTransparentBounds(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">UBool uregex_hitEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">void uregex_useAnchoringBounds(URegularExpression *regexp, UBool b, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">int32_t uregex_getStackLimit(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">int32_t uregex_regionEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">void uregex_setMatchCallback(URegularExpression *regexp, URegexMatchCallback *callback, const void *context, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">void uregex_setRegion(URegularExpression *regexp, int32_t regionStart, int32_t regionLimit, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">int32_t uregex_regionStart(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">void uregex_useTransparentBounds(URegularExpression *regexp, UBool b, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">void uregex_setTimeLimit(URegularExpression *regexp, int32_t limit, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">int32_t uregex_getTimeLimit(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">void uregex_setStackLimit(URegularExpression *regexp, int32_t limit, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UTransliterator* u_fsettransliterator(UFILE *file, UFileDirection direction, UTransliterator *adopt, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_file_write(const UChar *ustring, int32_t count, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fsetlocale(UFILE *file, const char *locale)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">FILE* u_fgetfile(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UFILE* u_fopen(const char *filename, const char *perm, const char *locale, const char *codepage)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">void u_frewind(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vfprintf_u(UFILE *f, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsprintf(UChar *buffer, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UConverter* u_fgetConverter(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsprintf_u(UChar *buffer, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vfscanf_u(UFILE *f, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_sscanf(const UChar *buffer, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fscanf_u(UFILE *f, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_snprintf_u(UChar *buffer, int32_t count, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">void u_fclose(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UFILE* u_finit(FILE *f, const char *locale, const char *codepage)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UChar u_fgetc(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fscanf(UFILE *f, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsscanf(const UChar *buffer, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_sprintf(UChar *buffer, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UChar32 u_fputc(UChar32 uc, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_sprintf_u(UChar *buffer, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fputs(const UChar *s, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UChar* u_fgets(UChar *s, int32_t n, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsnprintf_u(UChar *buffer, int32_t count, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UFILE* u_fstropen(UChar *stringBuf, int32_t capacity, const char *locale)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">const char* u_fgetcodepage(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UBool u_feof(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fprintf(UFILE *f, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">const char* u_fgetlocale(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsnprintf(UChar *buffer, int32_t count, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UChar32 u_fungetc(UChar32 c, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fsetcodepage(const char *codepage, UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fprintf_u(UFILE *f, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsscanf_u(const UChar *buffer, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">void u_fflush(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_snprintf(UChar *buffer, int32_t count, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vfprintf(UFILE *f, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_file_read(UChar *chars, int32_t count, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UChar32 u_fgetcx(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_sscanf_u(const UChar *buffer, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vfscanf(UFILE *f, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="promoted">
+<h2>Promoted to stable in 4.2</h2>
+</a>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>4.0.1</th><th>4.2</th>
+</tr>
+</THEAD>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval::DateInterval(UDate fromDate, UDate toDate)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval& DateInterval::operator=(const DateInterval &)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">UDate DateInterval::getToDate() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">UBool DateInterval::operator==(const DateInterval &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval::DateInterval(const DateInterval &other)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">UDate DateInterval::getFromDate() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">UBool DateInterval::operator!=(const DateInterval &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval* DateInterval::clone() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">UClassID DateInterval::getDynamicClassID(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtintrv.h</td><td class="proto">static UClassID DateInterval::getStaticClassID(void)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtintrv.h</td><td class="proto">DateInterval::~DateInterval()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">const DateIntervalInfo* DateIntervalFormat::getDateIntervalInfo(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &skeleton, const Locale &locale, const DateIntervalInfo &dtitvinf, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">DateIntervalFormat::~DateIntervalFormat()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &skeleton, const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">UBool DateIntervalFormat::operator!=(const Format &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">void DateIntervalFormat::setDateIntervalInfo(const DateIntervalInfo &newIntervalPatterns, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">const DateFormat* DateIntervalFormat::getDateFormat(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">UClassID DateIntervalFormat::getDynamicClassID(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">UnicodeString& DateIntervalFormat::format(Calendar &fromCalendar, Calendar &toCalendar, UnicodeString &appendTo, FieldPosition &fieldPosition, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &skeleton, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">Format* DateIntervalFormat::clone(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">UBool DateIntervalFormat::operator==(const Format &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">static DateIntervalFormat* DateIntervalFormat::createInstance(const UnicodeString &skeleton, const DateIntervalInfo &dtitvinf, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">UnicodeString& DateIntervalFormat::format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &fieldPosition, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvfmt.h</td><td class="proto">static UClassID DateIntervalFormat::getStaticClassID(void)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvfmt.h</td><td class="proto">UnicodeString& DateIntervalFormat::format(const DateInterval *dtInterval, UnicodeString &appendTo, FieldPosition &fieldPosition, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">void DateIntervalInfo::setFallbackIntervalPattern(const UnicodeString &fallbackPattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">void DateIntervalInfo::setIntervalPattern(const UnicodeString &skeleton, UCalendarDateFields lrgDiffCalUnit, const UnicodeString &intervalPattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo::DateIntervalInfo(const DateIntervalInfo &)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo::~DateIntervalInfo()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo::DateIntervalInfo(const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">UnicodeString& DateIntervalInfo::getIntervalPattern(const UnicodeString &skeleton, UCalendarDateFields field, UnicodeString &result, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">UnicodeString& DateIntervalInfo::getFallbackIntervalPattern(UnicodeString &result) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">UBool DateIntervalInfo::getDefaultOrder() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo& DateIntervalInfo::operator=(const DateIntervalInfo &)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">dtitvinf.h</td><td class="proto">DateIntervalInfo* DateIntervalInfo::clone(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">msgfmt.h</td><td class="proto">Format* MessageFormat::getFormat(const UnicodeString &formatName, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">msgfmt.h</td><td class="proto">StringEnumeration* MessageFormat::getFormatNames(UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">msgfmt.h</td><td class="proto">void MessageFormat::adoptFormat(const UnicodeString &formatName, Format *formatToAdopt, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">msgfmt.h</td><td class="proto">void MessageFormat::setFormat(const UnicodeString &formatName, const Format &format, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">msgfmt.h</td><td class="proto">UBool MessageFormat::usesNamedArguments() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString& PluralFormat::format(int32_t number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">Format* PluralFormat::clone(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UClassID PluralFormat::getDynamicClassID() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const Locale &locale, const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString PluralFormat::format(double number, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString PluralFormat::format(int32_t number, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString& PluralFormat::format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const PluralFormat &other)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat& PluralFormat::operator=(const PluralFormat &other)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">UBool PluralFormat::operator==(const Format &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">void PluralFormat::setLocale(const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">void PluralFormat::applyPattern(const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::~PluralFormat()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const PluralRules &rules, const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const Locale &locale, const PluralRules &rules, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">void PluralFormat::setNumberFormat(const NumberFormat *format, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString& PluralFormat::toPattern(UnicodeString &appendTo)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">UBool PluralFormat::operator!=(const Format &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const Locale &locale, const PluralRules &rules, const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">static UClassID PluralFormat::getStaticClassID(void)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const UnicodeString &pattern, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">void PluralFormat::parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurfmt.h</td><td class="proto">UnicodeString& PluralFormat::format(double number, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurfmt.h</td><td class="proto">PluralFormat::PluralFormat(const PluralRules &rules, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">static UClassID PluralRules::getStaticClassID(void)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">UClassID PluralRules::getDynamicClassID() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">PluralRules::PluralRules(UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">UnicodeString PluralRules::select(double number) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">UBool PluralRules::operator!=(const PluralRules &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">PluralRules::~PluralRules()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">UBool PluralRules::isKeyword(const UnicodeString &keyword) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">static PluralRules* PluralRules::createRules(const UnicodeString &description, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">UBool PluralRules::operator==(const PluralRules &other) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">static PluralRules* PluralRules::createDefaultRules(UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">StringEnumeration* PluralRules::getKeywords(UErrorCode &status) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">PluralRules* PluralRules::clone() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">PluralRules::PluralRules(const PluralRules &other)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">static PluralRules* PluralRules::forLocale(const Locale &locale, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">plurrule.h</td><td class="proto">UnicodeString PluralRules::select(int32_t number) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">plurrule.h</td><td class="proto">PluralRules& PluralRules::operator=(const PluralRules &)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">UBool RegexMatcher::hasAnchoringBounds() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">UBool RegexMatcher::requireEnd() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">RegexMatcher& RegexMatcher::useTransparentBounds(UBool b)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">void RegexMatcher::setStackLimit(int32_t limit, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">int32_t RegexMatcher::regionEnd() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">void RegexMatcher::setMatchCallback(URegexMatchCallback *callback, const void *context, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">RegexMatcher& RegexMatcher::region(int32_t start, int32_t limit, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">int32_t RegexMatcher::getTimeLimit() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">int32_t RegexMatcher::getStackLimit() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">int32_t RegexMatcher::regionStart() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">void RegexMatcher::getMatchCallback(URegexMatchCallback *&callback, const void *&context, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">UBool RegexMatcher::hasTransparentBounds() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">RegexMatcher& RegexMatcher::useAnchoringBounds(UBool b)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">regex.h</td><td class="proto">UBool RegexMatcher::hitEnd() const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">regex.h</td><td class="proto">void RegexMatcher::setTimeLimit(int32_t limit, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">timezone.h</td><td class="proto">static UnicodeString& TimeZone::getCanonicalID(const UnicodeString &id, UnicodeString &canonicalID, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">timezone.h</td><td class="proto">static UnicodeString& TimeZone::getCanonicalID(const UnicodeString &id, UnicodeString &canonicalID, UBool &isSystemID, UErrorCode &status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ucal.h</td><td class="proto">UCalendar* ucal_clone(const UCalendar *cal, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ucal.h</td><td class="proto">int32_t ucal_getCanonicalTimeZoneID(const UChar *id, int32_t len, UChar *result, int32_t resultCapacity, UBool *isSystemID, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ucurr.h</td><td class="proto">int32_t ucurr_forLocaleAndDate(const char *locale, UDate date, int32_t index, UChar *buff, int32_t buffCapacity, UErrorCode *ec)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ucurr.h</td><td class="proto">int32_t ucurr_countCurrencies(const char *locale, UDate date, UErrorCode *ec)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uloc.h</td><td class="proto">int32_t uloc_minimizeSubtags(const char *localeID, char *minimizedLocaleID, int32_t minimizedLocaleIDCapacity, UErrorCode *err)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uloc.h</td><td class="proto">ULayoutType uloc_getCharacterOrientation(const char *localeId, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uloc.h</td><td class="proto">int32_t uloc_addLikelySubtags(const char *localeID, char *maximizedLocaleID, int32_t maximizedLocaleIDCapacity, UErrorCode *err)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uloc.h</td><td class="proto">ULayoutType uloc_getLineOrientation(const char *localeId, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uniset.h</td><td class="proto">UBool UnicodeSet::isBogus(void) const</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uniset.h</td><td class="proto">void UnicodeSet::setToBogus()</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">int32_t UnicodeString::extract(int32_t start, int32_t startLength, char *target, uint32_t targetLength) const</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">int32_t UnicodeString::extract(int32_t start, int32_t startLength, char *target, uint32_t targetLength, const char *codepage) const</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData)</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData, const char *codepage)</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData, int32_t dataLength, const char *codepage)</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData, int32_t dataLength)</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">UBool uregex_hasAnchoringBounds(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">UBool uregex_requireEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">void uregex_getMatchCallback(const URegularExpression *regexp, URegexMatchCallback **callback, const void **context, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">UBool uregex_hasTransparentBounds(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">UBool uregex_hitEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">void uregex_useAnchoringBounds(URegularExpression *regexp, UBool b, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">int32_t uregex_getStackLimit(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">int32_t uregex_regionEnd(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">void uregex_setMatchCallback(URegularExpression *regexp, URegexMatchCallback *callback, const void *context, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">void uregex_setRegion(URegularExpression *regexp, int32_t regionStart, int32_t regionLimit, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">int32_t uregex_regionStart(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">void uregex_useTransparentBounds(URegularExpression *regexp, UBool b, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">void uregex_setTimeLimit(URegularExpression *regexp, int32_t limit, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">uregex.h</td><td class="proto">int32_t uregex_getTimeLimit(const URegularExpression *regexp, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row0">
+<td class="file">uregex.h</td><td class="proto">void uregex_setStackLimit(URegularExpression *regexp, int32_t limit, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>4.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UTransliterator* u_fsettransliterator(UFILE *file, UFileDirection direction, UTransliterator *adopt, UErrorCode *status)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_file_write(const UChar *ustring, int32_t count, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fsetlocale(UFILE *file, const char *locale)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">FILE* u_fgetfile(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UFILE* u_fopen(const char *filename, const char *perm, const char *locale, const char *codepage)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">void u_frewind(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vfprintf_u(UFILE *f, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsprintf(UChar *buffer, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UConverter* u_fgetConverter(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsprintf_u(UChar *buffer, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vfscanf_u(UFILE *f, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_sscanf(const UChar *buffer, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fscanf_u(UFILE *f, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_snprintf_u(UChar *buffer, int32_t count, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">void u_fclose(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UFILE* u_finit(FILE *f, const char *locale, const char *codepage)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UChar u_fgetc(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fscanf(UFILE *f, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsscanf(const UChar *buffer, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_sprintf(UChar *buffer, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">UChar32 u_fputc(UChar32 uc, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_sprintf_u(UChar *buffer, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fputs(const UChar *s, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UChar* u_fgets(UChar *s, int32_t n, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsnprintf_u(UChar *buffer, int32_t count, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UFILE* u_fstropen(UChar *stringBuf, int32_t capacity, const char *locale)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">const char* u_fgetcodepage(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UBool u_feof(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fprintf(UFILE *f, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">const char* u_fgetlocale(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsnprintf(UChar *buffer, int32_t count, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UChar32 u_fungetc(UChar32 c, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fsetcodepage(const char *codepage, UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_fprintf_u(UFILE *f, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vsscanf_u(const UChar *buffer, const UChar *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">void u_fflush(UFILE *file)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_snprintf(UChar *buffer, int32_t count, const char *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vfprintf(UFILE *f, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_file_read(UChar *chars, int32_t count, UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">UChar32 u_fgetcx(UFILE *f)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row1">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_sscanf_u(const UChar *buffer, const UChar *patternSpecification,...)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+<tr class="row0">
+<td class="file">ustdio.h</td><td class="proto">int32_t u_vfscanf(UFILE *f, const char *patternSpecification, va_list ap)</td><td class="" colspan="
+ 2
+ " align="
+ center
+ ">Draft>Stable<br>3.0</td>
+</tr>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="added">
+<h2>Added in 4.2</h2>
+</a>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>4.0.1</th><th>4.2</th>
+</tr>
+</THEAD>
+<tr class="row1">
+<td class="file">bytestream.h</td><td class="proto">CheckedArrayByteSink::CheckedArrayByteSink(char *outbuf, int32_t capacity)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">bytestream.h</td><td class="proto">void ByteSink::Flush()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">bytestream.h</td><td class="proto">ByteSink::~ByteSink()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">bytestream.h</td><td class="proto">char* ByteSink::GetAppendBuffer(int32_t min_capacity, int32_t desired_capacity_hint, char *scratch, int32_t scratch_capacity, int32_t *result_capacity)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">bytestream.h</td><td class="proto">void CheckedArrayByteSink::Append(const char *bytes, int32_t n)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">bytestream.h</td><td class="proto">char* CheckedArrayByteSink::GetAppendBuffer(int32_t min_capacity, int32_t desired_capacity_hint, char *scratch, int32_t scratch_capacity, int32_t *result_capacity)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">bytestream.h</td><td class="proto">ByteSink::ByteSink()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">bytestream.h</td><td class="proto">UBool CheckedArrayByteSink::Overflowed() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">bytestream.h</td><td class="proto">int32_t CheckedArrayByteSink::NumberOfBytesWritten() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">bytestream.h</td><td class="proto">void ByteSink::Append(const char *bytes, int32_t n)=0</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">calendar.h</td><td class="proto">static StringEnumeration* Calendar::getKeywordValuesForLocale(const char *key, const Locale &locale, UBool commonlyUsed, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">coll.h</td><td class="proto">UCollationResult Collator::compare(UCharIterator &sIter, UCharIterator &tIter, UErrorCode &status) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">coll.h</td><td class="proto">UCollationResult Collator::compareUTF8(const StringPiece &source, const StringPiece &target, UErrorCode &status) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">coll.h</td><td class="proto">static StringEnumeration* Collator::getKeywordValuesForLocale(const char *keyword, const Locale &locale, UBool commonlyUsed, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">static UClassID CurrencyPluralInfo::getStaticClassID()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">currpinf.h</td><td class="proto">CurrencyPluralInfo* CurrencyPluralInfo::clone() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">void CurrencyPluralInfo::setCurrencyPluralPattern(const UnicodeString &pluralCount, const UnicodeString &pattern, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">currpinf.h</td><td class="proto">void CurrencyPluralInfo::setPluralRules(const UnicodeString &ruleDescription, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">UnicodeString& CurrencyPluralInfo::getCurrencyPluralPattern(const UnicodeString &pluralCount, UnicodeString &result) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">currpinf.h</td><td class="proto">const PluralRules* CurrencyPluralInfo::getPluralRules() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">void CurrencyPluralInfo::setLocale(const Locale &loc, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">currpinf.h</td><td class="proto">CurrencyPluralInfo::CurrencyPluralInfo(const CurrencyPluralInfo &info)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">UClassID CurrencyPluralInfo::getDynamicClassID() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">currpinf.h</td><td class="proto">CurrencyPluralInfo::CurrencyPluralInfo(UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">CurrencyPluralInfo::~CurrencyPluralInfo()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">currpinf.h</td><td class="proto">const Locale& CurrencyPluralInfo::getLocale() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">CurrencyPluralInfo::CurrencyPluralInfo(const Locale &locale, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">currpinf.h</td><td class="proto">CurrencyPluralInfo& CurrencyPluralInfo::operator=(const CurrencyPluralInfo &info)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">UBool CurrencyPluralInfo::operator!=(const CurrencyPluralInfo &info) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">currpinf.h</td><td class="proto">static UBool ValueComparator(UHashTok val1, UHashTok val2)</td><td class="">None<br>
+</td><td>Internal<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">currpinf.h</td><td class="proto">UBool CurrencyPluralInfo::operator==(const CurrencyPluralInfo &info) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">dcfmtsym.h</td><td class="proto">const UnicodeString& DecimalFormatSymbols::getPatternForCurrencySpacing(ECurrencySpacing type, UBool beforeCurrency, UErrorCode &status) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">dcfmtsym.h</td><td class="proto">void DecimalFormatSymbols::setPatternForCurrencySpacing(ECurrencySpacing type, UBool beforeCurrency, const UnicodeString &pattern)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">decimfmt.h</td><td class="proto">void DecimalFormat::setCurrencyPluralInfo(const CurrencyPluralInfo &info)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">decimfmt.h</td><td class="proto">static UBool AffixValueComparator(UHashTok val1, UHashTok val2)</td><td class="">None<br>
+</td><td>Internal<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">decimfmt.h</td><td class="proto">const CurrencyPluralInfo* DecimalFormat::getCurrencyPluralInfo(void) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">decimfmt.h</td><td class="proto">static UBool AffixPatternValueComparator(UHashTok val1, UHashTok val2)</td><td class="">None<br>
+</td><td>Internal<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">decimfmt.h</td><td class="proto">void DecimalFormat::adoptCurrencyPluralInfo(CurrencyPluralInfo *toAdopt)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">decimfmt.h</td><td class="proto">DecimalFormat::DecimalFormat(const UnicodeString &pattern, DecimalFormatSymbols *symbolsToAdopt, NumberFormat::EStyles style, UErrorCode &status)</td><td class="">None<br>
+</td><td>Internal<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">dtfmtsym.h</td><td class="proto">const UnicodeString* DateFormatSymbols::getNarrowEras(int32_t &count) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">dtfmtsym.h</td><td class="proto">void DateFormatSymbols::setNarrowEras(const UnicodeString *narrowEras, int32_t count)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">dtitvinf.h</td><td class="proto">static UBool hashTableValueComparator(UHashTok val1, UHashTok val2)</td><td class="">None<br>
+</td><td>Internal<br>
+<span class=""><span>4.0</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">errorcode.h</td><td class="proto">void ErrorCode::set(UErrorCode value)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">errorcode.h</td><td class="proto">UBool ErrorCode::isSuccess() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">errorcode.h</td><td class="proto">UErrorCode ErrorCode::reset()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">errorcode.h</td><td class="proto">void ErrorCode::check() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">errorcode.h</td><td class="proto">ErrorCode::operator UErrorCode &()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">errorcode.h</td><td class="proto">ErrorCode::~ErrorCode()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">errorcode.h</td><td class="proto">UBool ErrorCode::isFailure() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">errorcode.h</td><td class="proto">ErrorCode::ErrorCode()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">errorcode.h</td><td class="proto">ErrorCode::operator UErrorCode *()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">errorcode.h</td><td class="proto">UErrorCode ErrorCode::get() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">LEGlyphStorage.h</td><td class="proto">void LEGlyphStorage::moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID* LEGlyphStorage::insertGlyphs(le_int32 atIndex, le_int32 insertCount, LEErrorCode &success)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">msgfmt.h</td><td class="proto">int32_t MessageFormat::getArgTypeCount() const</td><td class="">None<br>
+</td><td>Internal<br>
+<span class=""><span>.</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">numfmt.h</td><td class="proto">static NumberFormat* NumberFormat::createInstance(const Locale &desiredLocale, EStyles choice, UErrorCode &success)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">numsys.h</td><td class="proto">int32_t NumberingSystem::getRadix()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">numsys.h</td><td class="proto">NumberingSystem::NumberingSystem(const NumberingSystem &other)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">numsys.h</td><td class="proto">static NumberingSystem* NumberingSystem::createInstance(UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">numsys.h</td><td class="proto">static StringEnumeration* NumberingSystem::getAvailableNames(UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">numsys.h</td><td class="proto">static NumberingSystem* NumberingSystem::createInstance(const Locale &inLocale, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">numsys.h</td><td class="proto">NumberingSystem::NumberingSystem()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">numsys.h</td><td class="proto">UBool NumberingSystem::isAlgorithmic() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">numsys.h</td><td class="proto">static NumberingSystem* NumberingSystem::createInstanceByName(const char *name, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">numsys.h</td><td class="proto">UnicodeString NumberingSystem::getDescription()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">numsys.h</td><td class="proto">static UClassID NumberingSystem::getStaticClassID(void)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">numsys.h</td><td class="proto">NumberingSystem::~NumberingSystem()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">numsys.h</td><td class="proto">static NumberingSystem* NumberingSystem::createInstance(int32_t radix, UBool isAlgorithmic, const UnicodeString &description, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">numsys.h</td><td class="proto">UClassID NumberingSystem::getDynamicClassID() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">smpdtfmt.h</td><td class="proto">SimpleDateFormat::SimpleDateFormat(const UnicodeString &pattern, const UnicodeString &override, const Locale &locale, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">smpdtfmt.h</td><td class="proto">SimpleDateFormat::SimpleDateFormat(const UnicodeString &pattern, const UnicodeString &override, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">stringpiece.h</td><td class="proto">void StringPiece::remove_suffix(int32_t n)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">stringpiece.h</td><td class="proto">UBool StringPiece::empty() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">stringpiece.h</td><td class="proto">void StringPiece::remove_prefix(int32_t n)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">stringpiece.h</td><td class="proto">void StringPiece::clear()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">stringpiece.h</td><td class="proto">int32_t StringPiece::length() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">stringpiece.h</td><td class="proto">StringPiece::StringPiece(const char *offset, int32_t len)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">stringpiece.h</td><td class="proto">const char* StringPiece::data() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">stringpiece.h</td><td class="proto">int32_t StringPiece::size() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">stringpiece.h</td><td class="proto">StringPiece StringPiece::substr(int32_t pos, int32_t len=npos) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">stringpiece.h</td><td class="proto">StringPiece::StringPiece(const StringPiece &x, int32_t pos, int32_t len)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">stringpiece.h</td><td class="proto">StringPiece::StringPiece()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">stringpiece.h</td><td class="proto">StringPiece::StringPiece(const char *str)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">stringpiece.h</td><td class="proto">StringPiece::StringPiece(const StringPiece &x, int32_t pos)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tblcoll.h</td><td class="proto">UCollationResult RuleBasedCollator::compare(UCharIterator &sIter, UCharIterator &tIter, UErrorCode &status) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmunit.h</td><td class="proto">UObject* TimeUnit::clone() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmunit.h</td><td class="proto">UTimeUnitFields TimeUnit::getTimeUnitField() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmunit.h</td><td class="proto">UClassID TimeUnit::getDynamicClassID() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmunit.h</td><td class="proto">TimeUnit::TimeUnit(const TimeUnit &other)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmunit.h</td><td class="proto">UBool TimeUnit::operator==(const UObject &other) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmunit.h</td><td class="proto">TimeUnit::~TimeUnit()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmunit.h</td><td class="proto">UBool TimeUnit::operator!=(const UObject &other) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmunit.h</td><td class="proto">TimeUnit& TimeUnit::operator=(const TimeUnit &other)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmunit.h</td><td class="proto">static TimeUnit* TimeUnit::createInstance(UTimeUnitFields timeUnitField, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmunit.h</td><td class="proto">static UClassID TimeUnit::getStaticClassID()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutamt.h</td><td class="proto">TimeUnit::UTimeUnitFields TimeUnitAmount::getTimeUnitField() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutamt.h</td><td class="proto">UBool TimeUnitAmount::operator==(const UObject &other) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutamt.h</td><td class="proto">UObject* TimeUnitAmount::clone() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutamt.h</td><td class="proto">UBool TimeUnitAmount::operator!=(const UObject &other) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutamt.h</td><td class="proto">TimeUnitAmount& TimeUnitAmount::operator=(const TimeUnitAmount &other)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutamt.h</td><td class="proto">TimeUnitAmount::TimeUnitAmount(const TimeUnitAmount &other)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutamt.h</td><td class="proto">TimeUnitAmount::TimeUnitAmount(const Formattable &number, TimeUnit::UTimeUnitFields timeUnitField, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutamt.h</td><td class="proto">TimeUnitAmount::~TimeUnitAmount()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutamt.h</td><td class="proto">const TimeUnit& TimeUnitAmount::getTimeUnit() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutamt.h</td><td class="proto">static UClassID TimeUnitAmount::getStaticClassID(void)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutamt.h</td><td class="proto">TimeUnitAmount::TimeUnitAmount(double amount, TimeUnit::UTimeUnitFields timeUnitField, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutamt.h</td><td class="proto">UClassID TimeUnitAmount::getDynamicClassID(void) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">TimeUnitFormat::~TimeUnitFormat()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutfmt.h</td><td class="proto">TimeUnitFormat::TimeUnitFormat(UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">UClassID TimeUnitFormat::getDynamicClassID(void) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutfmt.h</td><td class="proto">TimeUnitFormat::TimeUnitFormat(const Locale &locale, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">UnicodeString& TimeUnitFormat::format(const Formattable &obj, UnicodeString &toAppendTo, FieldPosition &pos, UErrorCode &status) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutfmt.h</td><td class="proto">UBool TimeUnitFormat::operator==(const Format &other) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">Format* TimeUnitFormat::clone(void) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutfmt.h</td><td class="proto">void TimeUnitFormat::setLocale(const Locale &locale, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">void TimeUnitFormat::parseObject(const UnicodeString &source, Formattable &result, ParsePosition &pos) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutfmt.h</td><td class="proto">TimeUnitFormat::TimeUnitFormat(const TimeUnitFormat &)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">TimeUnitFormat::TimeUnitFormat(const Locale &locale, EStyle style, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutfmt.h</td><td class="proto">static UClassID TimeUnitFormat::getStaticClassID(void)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">TimeUnitFormat& TimeUnitFormat::operator=(const TimeUnitFormat &other)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">tmutfmt.h</td><td class="proto">void TimeUnitFormat::setNumberFormat(const NumberFormat &format, UErrorCode &status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">tmutfmt.h</td><td class="proto">UBool TimeUnitFormat::operator!=(const Format &other) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ucal.h</td><td class="proto">const char* ucal_getType(const UCalendar *cal, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ucal.h</td><td class="proto">UEnumeration* ucal_getKeywordValuesForLocale(const char *key, const char *locale, UBool commonlyUsed, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ucnvsel.h</td><td class="proto">void ucnvsel_close(UConverterSelector *sel)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ucnvsel.h</td><td class="proto">UConverterSelector* ucnvsel_open(const char *const *converterList, int32_t converterListSize, const USet *excludedCodePoints, const UConverterUnicodeSet whichSet, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ucnvsel.h</td><td class="proto">int32_t ucnvsel_serialize(const UConverterSelector *sel, void *buffer, int32_t bufferCapacity, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ucnvsel.h</td><td class="proto">UEnumeration* ucnvsel_selectForString(const UConverterSelector *sel, const UChar *s, int32_t length, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ucnvsel.h</td><td class="proto">UEnumeration* ucnvsel_selectForUTF8(const UConverterSelector *sel, const char *s, int32_t length, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ucnvsel.h</td><td class="proto">UConverterSelector* ucnvsel_openFromSerialized(const void *buffer, int32_t length, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ucol.h</td><td class="proto">UEnumeration* ucol_getKeywordValuesForLocale(const char *key, const char *locale, UBool commonlyUsed, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ucurr.h</td><td class="proto">UEnumeration* ucurr_getKeywordValuesForLocale(const char *key, const char *locale, UBool commonlyUsed, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ucurr.h</td><td class="proto">const UChar* ucurr_getPluralName(const UChar *currency, const char *locale, UBool *isChoiceFormat, const char *pluralCount, int32_t *len, UErrorCode *ec)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uloc.h</td><td class="proto">int32_t uloc_forLanguageTag(const char *langtag, char *localeID, int32_t localeIDCapacity, int32_t *parsedLength, UErrorCode *err)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uloc.h</td><td class="proto">int32_t uloc_toLanguageTag(const char *localeID, char *langtag, int32_t langtagCapacity, UBool strict, UErrorCode *err)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocdata.h</td><td class="proto">int32_t ulocdata_getLocaleDisplayPattern(ULocaleData *uld, UChar *pattern, int32_t patternCapacity, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ulocdata.h</td><td class="proto">void ulocdata_getCLDRVersion(UVersionInfo versionArray, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ulocdata.h</td><td class="proto">int32_t ulocdata_getLocaleSeparator(ULocaleData *uld, UChar *separator, int32_t separatorCapacity, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uniset.h</td><td class="proto">USet * UnicodeSet::toUSet()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uniset.h</td><td class="proto">const UnicodeSet * UnicodeSet::fromUSet(const USet *uset)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uniset.h</td><td class="proto">UnicodeSet * UnicodeSet::fromUSet(USet *uset)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uniset.h</td><td class="proto">const USet * UnicodeSet::toUSet() const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">int32_t UnicodeString::extract(int32_t start, int32_t startLength, char *target, uint32_t targetLength) const</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">static UnicodeString UnicodeString::fromUTF32(const UChar32 *utf32, int32_t length)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">int32_t UnicodeString::extract(int32_t start, int32_t startLength, char *target, uint32_t targetLength, const char *codepage) const</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData)</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData, const char *codepage)</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData, int32_t dataLength, const char *codepage)</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">void UnicodeString::toUTF8(ByteSink &sink) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">static UnicodeString UnicodeString::fromUTF8(const StringPiece &utf8)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">unistr.h</td><td class="proto">UnicodeString::UnicodeString(const char *codepageData, int32_t dataLength)</td><td class="">None<br>
+</td><td>Stable<br>
+<span class=""><span>2.0</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">unistr.h</td><td class="proto">int32_t UnicodeString::toUTF32(UChar32 *utf32, int32_t capacity, UErrorCode &errorCode) const</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uset.h</td><td class="proto">USet* uset_openEmpty()</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uset.h</td><td class="proto">void uset_closeOver(USet *set, int32_t attributes)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uset.h</td><td class="proto">void uset_removeAllStrings(USet *set)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_getSkeletonUTF8(const USpoofChecker *sc, uint32_t type, const char *s, int32_t length, char *dest, int32_t destCapacity, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_areConfusableUTF8(const USpoofChecker *sc, const char *s1, int32_t length1, const char *s2, int32_t length2, int32_t *position, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">const USet* uspoof_getAllowedChars(const USpoofChecker *sc, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">USpoofChecker* uspoof_clone(const USpoofChecker *sc, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_getSkeleton(const USpoofChecker *sc, uint32_t type, const UChar *s, int32_t length, UChar *dest, int32_t destCapacity, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">void uspoof_setAllowedLocales(USpoofChecker *sc, const char *localesList, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">const char* uspoof_getAllowedLocales(USpoofChecker *sc, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">USpoofChecker* uspoof_openFromSource(const char *confusables, int32_t confusablesLen, const char *confusablesWholeScript, int32_t confusablesWholeScriptLen, int32_t *errType, UParseError *pe, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_areConfusable(const USpoofChecker *sc, const UChar *s1, int32_t length1, const UChar *s2, int32_t length2, int32_t *position, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_getChecks(const USpoofChecker *sc, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">void uspoof_setChecks(USpoofChecker *sc, int32_t checks, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">USpoofChecker* uspoof_open(UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">void uspoof_close(USpoofChecker *sc)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_serialize(USpoofChecker *sc, void *data, int32_t capacity, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">void uspoof_setAllowedChars(USpoofChecker *sc, const USet *chars, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check(const USpoofChecker *sc, const UChar *text, int32_t length, int32_t *position, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUTF8(const USpoofChecker *sc, const char *text, int32_t length, int32_t *position, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uspoof.h</td><td class="proto">USpoofChecker* uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLength, UErrorCode *pErrorCode)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">usprep.h</td><td class="proto">UStringPrepProfile* usprep_openByType(UStringPrepProfileType type, UErrorCode *status)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">ustring.h</td><td class="proto">UChar* u_strFromUTF32WithSub(UChar *dest, int32_t destCapacity, int32_t *pDestLength, const UChar32 *src, int32_t srcLength, UChar32 subchar, int32_t *pNumSubstitutions, UErrorCode *pErrorCode)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">ustring.h</td><td class="proto">UChar32* u_strToUTF32WithSub(UChar32 *dest, int32_t destCapacity, int32_t *pDestLength, const UChar *src, int32_t srcLength, UChar32 subchar, int32_t *pNumSubstitutions, UErrorCode *pErrorCode)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row1">
+<td class="file">uversion.h</td><td class="proto">int32_t u_compareVersions(UVersionInfo v1, UVersionInfo v2)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+<tr class="row0">
+<td class="file">uversion.h</td><td class="proto">void u_versionFromUString(UVersionInfo versionArray, const UChar *versionString)</td><td class="">None<br>
+</td><td>Draft<br>
+<span class=""><span>4.2</span></span></td>
+</tr>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="other">
+<h2>Other existing drafts in 4.2</h2>
+</a>
+<div class="other">
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>4.0.1</th><th>4.2</th>
+</tr>
+</THEAD>
+</table>
+</div>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<p>
+<i><font size="-1">Contents generated by StableAPI tool on Wed Mar 18 22:04:30 PDT 2009<br>Copyright (C) 2009, International Business Machines Corporation, All Rights Reserved.</font></i>
+</p>
+</body>
+</html>
diff --git a/as_is/os390/unpax-icu.sh b/as_is/os390/unpax-icu.sh
new file mode 100755
index 0000000..23a1ebc
--- /dev/null
+++ b/as_is/os390/unpax-icu.sh
@@ -0,0 +1,102 @@
+#!/bin/sh
+# Copyright (C) 2001-2007, International Business Machines
+# Corporation and others. All Rights Reserved.
+#
+# Authors:
+# Ami Fixler
+# Steven R. Loomis
+# George Rhoten
+#
+# Shell script to unpax ICU and convert the files to an EBCDIC codepage.
+# After extracting to EBCDIC, binary files are re-extracted without the
+# EBCDIC conversion, thus restoring them to original codepage.
+#
+# Set the following variable to the list of binary file suffixes (extensions)
+
+#binary_suffixes='ico ICO bmp BMP jpg JPG gif GIF brk BRK'
+#ICU specific binary files
+binary_suffixes='brk BRK bin BIN res RES cnv CNV dat DAT icu ICU spp SPP xml XML'
+
+usage()
+{
+ echo "Enter archive filename as a parameter: $0 icu-archive.tar"
+}
+# first make sure we at least one arg and it's a file we can read
+if [ $# -eq 0 ]; then
+ usage
+ exit
+fi
+tar_file=$1
+if [ ! -r $tar_file ]; then
+ echo "$tar_file does not exist or cannot be read."
+ usage
+ exit
+fi
+
+echo ""
+echo "Extracting from $tar_file ..."
+echo ""
+# extract files while converting them to EBCDIC
+pax -rvf $tar_file -o to=IBM-1047,from=ISO8859-1 -o setfiletag
+
+echo ""
+echo "Determining binary files ..."
+echo ""
+
+# When building in ASCII mode, text files are converted as ASCII
+if [ "${ICU_ENABLE_ASCII_STRINGS}" -eq 1 ]; then
+ binary_suffixes="$binary_suffixes txt TXT ucm UCM"
+else
+ for file in `find ./icu \( -name \*.txt -print \) | sed -e 's/^\.\///'`; do
+ bom8=`head -c 3 $file|\
+ od -t x1|\
+ head -n 1|\
+ sed 's/ */ /g'|\
+ cut -f2-4 -d ' '|\
+ tr 'A-Z' 'a-z'`;
+ #Find a converted UTF-8 BOM
+ if [ "$bom8" = "57 8b ab" ]
+ then
+ binary_files="$binary_files $file";
+ fi
+ done
+fi
+
+for i in $(pax -f $tar_file 2>/dev/null)
+do
+ case $i in
+ */) ;; # then this entry is a directory
+ *.*) # then this entry has a dot in the filename
+ for j in $binary_suffixes
+ do
+ # We substitute the suffix more than once
+ # to handle files like NormalizationTest-3.2.0.txt
+ suf=${i#*.*}
+ suf=${suf#*.*}
+ suf=${suf#*.*}
+ if [ "$suf" = "$j" ]
+ then
+ binary_files="$binary_files $i"
+ break
+ fi
+ done
+ ;;
+ *) ;; # then this entry does not have a dot in it
+ esac
+done
+
+# now see if a re-extract of binary files is necessary
+if [ ${#binary_files} -eq 0 ]; then
+ echo ""
+ echo "There are no binary files to restore."
+else
+ echo "Restoring binary files ..."
+ echo ""
+ rm $binary_files
+ pax -rvf $tar_file $binary_files
+ # Tag the files as binary for proper interaction with the _BPXK_AUTOCVT
+ # environment setting
+ chtag -b $binary_files
+fi
+echo ""
+echo "$0 has completed extracting ICU from $tar_file."
diff --git a/as_is/os400/convertConfigure.sed b/as_is/os400/convertConfigure.sed
new file mode 100644
index 0000000..d125ea0
--- /dev/null
+++ b/as_is/os400/convertConfigure.sed
@@ -0,0 +1,20 @@
+# Copyright (C) 2006-2006, International Business Machines Corporation
+# and others. All Rights Reserved.
+#
+# Use "test -x" instead of "test -f" most of the time.
+# due to how executables are created in a different file system.
+s/as_executable_p="test -f"/as_executable_p="test -x"/g
+s/test -f "$ac_file"/test -x "$ac_file"/g
+s/test -f $ac_dir\/install-sh/test -x $ac_dir\/install-sh/g
+s/test -f $ac_dir\/install.sh/test -x $ac_dir\/install.sh/g
+s/test -f $ac_dir\/shtool/test -x $ac_dir\/shtool/g
+# Use the more efficient del instead of rm command.
+s/rm[ ]*-rf/del -f/g
+s/rm[ ]*-fr/del -f/g
+s/rm[ ]*-f/del -f/g
+# Borne shell isn't always available on i5/OS
+s/\/bin\/sh/\/usr\/bin\/qsh/g
+# Use -c qpponly instead of -E to enable the preprocessor on the compiler
+s/\$CC -E/\$CC -c -qpponly/g
+# no diff in qsh the equivalent is cmp
+s/ diff / cmp -s /g
\ No newline at end of file
diff --git a/as_is/os400/unpax-icu.sh b/as_is/os400/unpax-icu.sh
new file mode 100755
index 0000000..cd6dc1b
--- /dev/null
+++ b/as_is/os400/unpax-icu.sh
@@ -0,0 +1,179 @@
+#!/usr/bin/qsh
+# Copyright (C) 2000-2007, International Business Machines
+# Corporation and others. All Rights Reserved.
+#
+# Authors:
+# Ami Fixler
+# Barry Novinger
+# Steven R. Loomis
+# George Rhoten
+# Jason Spieth
+#
+# Shell script to unpax ICU and convert the files to an EBCDIC codepage.
+# After extracting to EBCDIC, binary files are re-extracted without the
+# EBCDIC conversion, thus restoring them to original codepage.
+#
+# Set the following variable to the list of binary file suffixes (extensions)
+
+#****************************************************************************
+#binary_suffixes='ico ICO bmp BMP jpg JPG gif GIF brk BRK'
+#ICU specific binary files
+#****************************************************************************
+binary_suffixes='brk BRK bin BIN res RES cnv CNV dat DAT icu ICU spp SPP xml XML'
+data_files='icu/source/data/brkitr/* icu/source/data/locales/* icu/source/data/coll/* icu/source/data/rbnf/* icu/source/data/mappings/* icu/source/data/misc/* icu/source/data/translit/* icu/source/data/unidata/* icu/source/test/testdata/*'
+
+#****************************************************************************
+# Function: usage
+# Description: Prints out text that describes how to call this script
+# Input: None
+# Output: None
+#****************************************************************************
+usage()
+{
+ echo "Enter archive filename as a parameter: $0 icu-archive.tar"
+}
+
+#****************************************************************************
+# first make sure we at least one arg and it's a file we can read
+#****************************************************************************
+
+# check for no arguments
+if [ $# -eq 0 ]; then
+ usage
+ exit
+fi
+
+# tar file is argument 1
+tar_file=$1
+
+# check that the file is valid
+if [ ! -r $tar_file ]; then
+ echo "$tar_file does not exist or cannot be read."
+ usage
+ exit
+fi
+
+#****************************************************************************
+# Determine which directories in the data_files list
+# are included in the provided archive
+#****************************************************************************
+for data_dir in $data_files
+do
+ if (pax -f $tar_file $data_dir >/dev/null 2>&1)
+ then
+ ebcdic_data="$ebcdic_data `echo $data_dir`";
+ fi
+done
+
+#****************************************************************************
+# Extract files. We do this in two passes. One pass for 819 files and a
+# second pass for 37 files
+#****************************************************************************
+echo ""
+echo "Extracting from $tar_file ..."
+echo ""
+
+# extract everything as iso-8859-1 except these directories
+pax -C 819 -rcvf $tar_file $ebcdic_data
+
+# extract files while converting them to EBCDIC
+echo ""
+echo "Extracting files which must be in ibm-37 ..."
+echo ""
+pax -C 37 -rvf $tar_file $ebcdic_data
+
+#****************************************************************************
+# For files we have restored as CCSID 37, check the BOM to see if they
+# should be processed as 819. Also handle files with special paths. Files
+# that match will be added to binary files lists. The lists will in turn
+# be processed to restore files as 819.
+#****************************************************************************
+echo ""
+echo "Determining binary files ..."
+echo ""
+
+# Process BOMs
+for file in `find ./icu \( -name \*.txt -print \)`; do
+ bom8=`head -n 1 $file|\
+ od -t x1|\
+ head -n 1|\
+ sed 's/ */ /g'|\
+ cut -f2-4 -d ' '|\
+ tr 'A-Z' 'a-z'`;
+ #Find a converted UTF-8 BOM
+ if [ "$bom8" = "057 08b 0ab" -o "$bom8" = "57 8b ab" ]
+ then
+ file="`echo $file | cut -d / -f2-`"
+
+ if [ `echo $binary_files | wc -w` -lt 200 ]
+ then
+ binary_files="$binary_files $file";
+ else
+ echo "Restoring binary files ..."
+ rm $binary_files;
+ pax -C 819 -rvf $tar_file $binary_files;
+ echo "Determining binary files ..."
+ binary_files="$file";
+ fi
+ fi
+done
+
+# Process special paths
+for i in $(pax -f $tar_file 2>/dev/null)
+do
+ case $i in
+ */)
+# then this entry is a directory
+ ;;
+ *.*)
+# then this entry has a dot in the filename
+ for j in $binary_suffixes
+ do
+ suf=${i#*.*}
+ if [ "$suf" = "$j" ]
+ then
+
+ if [ `echo $binary_files | wc -w` -lt 200 ]
+ then
+ binary_files="$binary_files $i";
+ else
+ echo "Restoring binary files ..."
+ rm $binary_files;
+ pax -C 819 -rvf $tar_file $binary_files;
+ echo "Determining binary files ..."
+ binary_files="$i";
+ fi
+ break
+ fi
+ done
+ ;;
+ *)
+# then this entry does not have a dot in it
+ ;;
+ esac
+done
+
+# now see if a re-extract of binary files is necessary
+if [ `echo $binary_files | wc -w` -gt 0 ]
+then
+ echo "Restoring binary files ..."
+ rm $binary_files
+ pax -C 819 -rvf $tar_file $binary_files
+fi
+
+#****************************************************************************
+# Generate and run the configure script
+#****************************************************************************
+
+echo ""
+echo "Generating qsh compatible configure ..."
+echo ""
+
+sed -f icu/as_is/os400/convertConfigure.sed icu/source/configure > icu/source/configureTemp
+del -f icu/source/configure
+mv icu/source/configureTemp icu/source/configure
+chmod 755 icu/source/configure
+
+echo ""
+echo "$0 has completed extracting ICU from $tar_file."
+
diff --git a/icu4c.css b/icu4c.css
new file mode 100644
index 0000000..b90de44
--- /dev/null
+++ b/icu4c.css
@@ -0,0 +1,275 @@
+/*
+ * Default CSS style sheet for the ICU Open Source site
+ * Copyright (C) 2005-2009, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ */
+
+/* Global styles */
+body,p,li,ol,ul,th,td {
+ font-size: 10pt;
+ font-family: "Arial", "Helvetica", sans-serif;
+}
+
+body {
+ margin: 1em;
+}
+
+body.draft {
+ background-image: url(images/draftbg.png);
+}
+
+.mainbody {
+ padding: 1em;
+}
+
+/*
+ * Customize the headers to have less space around them than usual
+ */
+h1 {
+ margin-bottom: 5pt;
+ margin-top: 5pt;
+ font-weight: 700;
+ font-size: 20pt;
+ font-family: "Arial", "Helvetica", sans-serif;
+}
+
+h2 {
+ margin-bottom: 0pt;
+ margin-top: 12pt;
+ font-weight: 700;
+ font-size: 14pt;
+ font-family: "Arial", "Helvetica", sans-serif;
+}
+
+h3 {
+ background-color: #666666;
+ color: White;
+ margin-bottom: 0pt;
+ margin-top: 12pt;
+ padding-left: 0.75em;
+ font-size: 1em;
+ font-family: "Arial", "Helvetica", sans-serif;
+}
+
+h4 {
+ margin-bottom: 0pt;
+ margin-top: 12pt;
+ font-size: 1em;
+ font-family: "Arial", "Helvetica", sans-serif;
+}
+
+h5, h6 {
+ margin-bottom: 0pt;
+ margin-top: 12pt;
+ padding-left: 0.75em;
+ font-size: x-small;
+ font-family: "Arial", "Helvetica", sans-serif;
+}
+
+/*
+ * Navigation sidebar on the left hand of most pages
+ */
+td.sidebar1 {
+ background-color: #99CCFF;
+ font-weight: 700;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding-top: 1em;
+ padding-left: 0.2em;
+ white-space: nowrap;
+}
+
+td.sidebar2 {
+ background-color: #99CCFF;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ margin-left: 0px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 1px;
+ padding-right: 0.5em;
+ white-space: nowrap;
+ text-decoration: none;
+ display: block;
+}
+td.sidebar2:hover {
+ background-color: #EEEEFF;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ padding-left: 1px;
+ padding-right: 0.5em;
+}
+
+a.sidebar2 {
+ text-decoration: none;
+ display: block;
+ width: 100%;
+}
+a.sidebar2:link {
+ color: #000099;
+ display: block;
+}
+a.sidebar2:hover {
+ background-color: #EEEEFF;
+ display: block;
+}
+.underlinehover:hover {
+ background-color: #EEEEFF;
+ text-decoration: underline;
+}
+
+/* This is the faded header at the top */
+td.fadedtop {
+ background-color: #006699;
+ background-image: url(http://www.icu-project.org/images/gr100.gif);
+}
+
+/* Related site on the left */
+p.relatedsite {
+ color: White;
+ font-weight: 700;
+ font-size: 10pt;
+ margin-top: 1em;
+ margin-bottom: 0;
+ padding-left: 0.2em;
+ white-space: nowrap;
+}
+
+/* Related site on the left */
+p.sidebar3 {
+ margin-top: 0.75em;
+ margin-bottom: 0;
+ padding-left: 0.8em;
+}
+a.sidebar3 {
+ font-size: 0.9em;
+ text-decoration: none;
+}
+a.sidebar3:link {
+ text-decoration: none;
+ color: White;
+}
+a.sidebar3:hover {
+ text-decoration: underline;
+}
+
+/* FAQ */
+li.faq_contents {
+ font-weight: 500;
+}
+p.faq_q {
+ font-weight: 700;
+ margin-bottom: 0px;
+}
+p.faq_a {
+ margin-top: 0px;
+}
+
+/* News items */
+table.newsItem {
+ padding-left: 1em;
+ padding-right: 1em;
+ border-width: medium;
+}
+th.newsItem {
+ background-color: #666666;
+ color: White;
+}
+td.newsItem {
+ background-color: #CCCCCC;
+}
+
+td.release-line,th.release-line {
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ white-space: nowrap;
+ border:1px;
+}
+.note {
+ font-style: italic;
+ font-size: small;
+ margin-left: 1em;
+}
+samp {
+ margin-left: 1em;
+ margin-right: 2em;
+ border-style: groove;
+ padding: 1em;
+ display: block;
+ background-color: #EEEEEE
+}
+table.rtable caption {
+ margin-left: 2px;
+ margin-right: 2px;
+ padding: 3px;
+ font-weight: bold;
+ background-color: #dee2ff;
+ text-align: left;
+}
+table.rtable tr th {
+ background-color: #dee2ff;
+ text-align: left;
+}
+table.rtable tr td {
+ background-color: #c0c0fd;
+ padding: 3px;
+}
+
+/* APIChangeReport specific things */
+.row0 {
+ background-color: white;
+}
+
+.row1 {
+ background-color: #dfd;
+}
+
+.verchange {
+ color: red;
+ font-weight: bold;
+ font-size: large;
+}
+
+.stabchange {
+ color: red;
+ font-size: large;
+}
+
+.bigwarn {
+ color: red;
+ background-color: white;
+ font-size: x-large;
+ margin: 0.5 em;
+}
+
+table.genTable {
+ border-collapse: collapse;
+ border: 1px solid black;
+}
+
+/* 'everything inc version */
+table.gentable td {
+ border: 1px solid gray;
+ padding: 0.25em;
+ font-size: small;
+}
+
+/* not version */
+table.genTable td.file,
+table.genTable td.proto {
+ border: none;
+ font-size: medium;
+}
+
+table.genTable td.file {
+ font-family: monospace;
+ font-weight: bold;
+}
+
+div.other .row0 {
+ background-color: white;
+}
+
+div.other .row1 {
+ background-color: #ddf;
+}
diff --git a/license.html b/license.html
new file mode 100644
index 0000000..ba2871a
--- /dev/null
+++ b/license.html
@@ -0,0 +1,51 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></meta>
+<title>ICU License - ICU 1.8.1 and later</title>
+</head>
+
+<body BGCOLOR="#ffffff">
+<h2>ICU License - ICU 1.8.1 and later</h2>
+
+<p>COPYRIGHT AND PERMISSION NOTICE</p>
+
+<p>
+Copyright (c) 1995-2009 International Business Machines Corporation and others
+</p>
+<p>
+All rights reserved.
+</p>
+<p>
+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.
+</p>
+<p>
+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.
+</p>
+<p>
+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.
+</p>
+
+<hr>
+<p><small>
+All trademarks and registered trademarks mentioned herein are the property of their respective owners.
+</small></p>
+</body>
+</html>
diff --git a/packaging/PACKAGES b/packaging/PACKAGES
new file mode 100644
index 0000000..12b3523
--- /dev/null
+++ b/packaging/PACKAGES
@@ -0,0 +1,159 @@
+Copyright (C) 2000-2003, International Business Machines
+Corporation and others. All Rights Reserved.
+ICU is packaged into a number of small, interdependent packages. This
+file describes what these packages are, what their name should be
+like, and what their contents are. It is useful as a reference and a
+guide when packaging ICU on a new system.
+
++ List of ICU packages.
+
+ICU is distributed as the following packages:
+
+- ICU libraries. This package contains the runtime libraries needed by
+applications that use ICU. All the other packages require this package
+to be installed.
+- ICU. This package contains the converters data, the timezones data,
+and all the ICU tools.
+- ICU locales. This package adds locales and break data.
+- ICU development. This package contains the files necessary to build
+applications that use ICU, i.e. header files, links to shared
+libraries used by the linker, static libraries, etc... It also
+contains sample applications and documentation.
+- ICU docs. This package contains further documentation for ICU,
+including a complete API reference.
+- ICU data. This package contains the source for the compiled data
+contained by the ICU package.
+- ICU international data. This package contains the source for the
+compiled data contained by the ICU locales package.
+
+In this file, we will refer to Autoconf variables as in $(bindir). In
+addition to these, we will use the following variables to denote
+ICU-specific directories or information:
+
+ VERSION ICU's dotted version number, e.g. 1.6.0.1 as of this
+ writing.
+
+ ICUDATADIR The directory where portable ICU data are. This is
+ defined as $(datadir)/icu/$(VERSION).
+ ICULIBDIR The directory where platform-specific ICU data
+ are. This is defined as $(libdir)/icu/$(VERSION).
+ ICUSYSCONFDIR The directory where ICU configuration files are. This
+ is defined as $(sysconfdir)/icu.
+
+When referring to libraries, .so will be used to denote the extension
+of a shared library, and .a to denote the extension of a static
+library. These extensions will actually be different on some platforms.
+
++ Configuration and compilation of ICU
+
+ICU should be configured with the following options:
+
+ --with-data-packaging=files
+ --disable-rpath
+ --enable-shared
+ --enable-static
+ --without-samples
+
+in addition to platform-specific settings (like a specific mandir or
+sysconfdir). Note that the use of --disable-rpath assumes that the
+packaging is made for a standard location, or that the package
+installation/deinstallation will correctly manage the configuration
+of the system's dyanmic loader. This is the right way of doing things.
+
+The configure script invokation should also be done with
+
+ CFLAGS="-O2"
+
+set, as in:
+
+ $ CFLAGS="-O2" ./configure ...
+
+The files packaging mode is chosen because it offers the maximum
+flexibility. Packages can be split easily, and system administrators
+can add converters, aliases, and other resources with little
+effort. Ideally, the ICU build will be modified to allow for distributing a
+libicudata.so with all the converters and locales, but indexes and aliases
+as separate files. But for now, this is the easiest way to get started.
+
++ The ICU libraries package
+
+The ICU libraries package is typically named `libicuXX' where XX is
+the major number of ICU's libraries. This number is ICU's version
+number multiplied by 10 and rounded down to the nearest integer (it is
+also the value of the LIB_VERSION_MAJOR configure substitution
+variable). For example, for ICU 1.6.0.1, it is 16, so the package name
+is `libicu16'. The major version is part of the package name to allow
+for the simultaneous installation of different ICU releases.
+
+This package contains:
+
+- All the shared libraries, and their major number symbolic link, but
+not the .so symbolic link that is only used at link time (this one is
+part of the development package). These are $(libdir)/libicu*.so.* and
+$(libdir)/libustdio.so.* at the time of this writing.
+
++ The ICU package
+
+The ICU package is simply named `icu'. It provides data used by the ICU
+libraries package and commands to create and manipulate that data.
+
+This package contains:
+
+- The Unicode data files (uprops.dat and unames.dat as of this writing).
+- The time zones data files (tz.dat).
+- All the binary data files for converters (.cnv files).
+- All the ICU commands.
+- The manual pages for ICU commands and file formats.
+
++ The ICU locales package
+
+The ICU locales package is named `icu-locales'. It provides data used by
+internationalization support in ICU.
+
+This package contains:
+
+- All the data for locales in ICU (.dat files).
+- All the break data for specific locales (.brk files).
+
++ The ICU development package
+
+The ICU developpment package is named `libicu-dev'. It provides all
+the files necessary to write applications that use ICU, along with
+examples and some documentation.
+
+This package contains:
+
+- The /usr/include/unicode directory which contains all the ICU
+headers.
+- The .so symbolic links used by the linker to link against the
+latest version of the libraries.
+- A sample Makefile fragment that can be included by applications
+using ICU, to faciliate their building, along with a platform-specific
+configuration file included by this fragment.
+- The sample applications from the ICU source tree, in an appropriate
+location for the system that the package is installed on (for example,
+on Debian, in /usr/share/doc/libicu-dev/examples).
+
+This package depends on the ICU libraries package with the exact same
+version, since it provides .so symbolic links to the latest libraries.
+
++ The ICU docs package
+
+The ICU docs package is named `libicu-doc'. It contains the files
+generated by doxygen when the `make doc' command is executed, in a
+location appropriate for the system that the package is installed on.
+
++ The ICU data package
+
+The ICU data package is named `icu-data'. It contains source files for
+the data found in the ICU package. These files are installed in
+$(ICUDATADIR).
+
++ The ICU international data package
+
+The ICU data package is named `icu-i18ndata'. It contains source files for
+the dat founf in the ICU locales package. These files are installed in
+$(ICUDATADIR).
+
+----
+Yves Arrouye <yves@realnames.com>
diff --git a/packaging/README b/packaging/README
new file mode 100644
index 0000000..1bfe85a
--- /dev/null
+++ b/packaging/README
@@ -0,0 +1,13 @@
+Copyright (C) 2000-2003, International Business Machines
+Corporation and others. All Rights Reserved.
+
+This directory contains information, input files and scripts for
+packaging ICU using specific packaging tools. We assume that the
+packager is familiar with the tools and procedures needed to build a
+package for a given packaging method (for example, how to use
+dpkg-buildpackage(1) on Debian GNU/Linux, or rpm(8) on distributions that
+use RPM packages).
+
+Please read the file PACKAGES if you are interested in packaging ICU
+yourself. It describes what the different packages should be, and what
+their contents are.
diff --git a/packaging/debian/README b/packaging/debian/README
new file mode 100644
index 0000000..0388625
--- /dev/null
+++ b/packaging/debian/README
@@ -0,0 +1,5 @@
+// Copyright (c) 2000-2003 International Business Machines
+// Corporation and others. All Rights Reserved.
+The Debian packaging is in the debian directory at the toplevel of ICU's
+distribution.
+
diff --git a/packaging/rpm/icu.spec b/packaging/rpm/icu.spec
new file mode 100644
index 0000000..6a1e63b
--- /dev/null
+++ b/packaging/rpm/icu.spec
@@ -0,0 +1,228 @@
+# Copyright (C) 2000-2005, International Business Machines
+# Corporation and others. All Rights Reserved.
+#
+# RPM specification file for ICU.
+#
+# Neal Probert <nprobert@walid.com> is the current maintainer.
+# Yves Arrouye <yves@realnames.com> is the original author.
+
+# This file can be freely redistributed under the same license as ICU.
+
+Name: icu
+Version: 3.4
+Release: 1
+Requires: libicu34 >= %{version}
+Summary: International Components for Unicode
+Packager: Ian Holsman (CNET Networks) <ianh@cnet.com>
+Copyright: X License
+Group: System Environment/Libraries
+Source: icu-%{version}.tgz
+BuildRoot: /var/tmp/%{name}-%{version}
+%description
+ICU is a set of C and C++ libraries that provides robust and full-featured
+Unicode and locale support. The library provides calendar support, conversions
+for many character sets, language sensitive collation, date
+and time formatting, support for many locales, message catalogs
+and resources, message formatting, normalization, number and currency
+formatting, time zones support, transliteration, word, line and
+sentence breaking, etc.
+
+This package contains the Unicode character database and derived
+properties, along with converters and time zones data.
+
+This package contains the runtime libraries for ICU. It does
+not contain any of the data files needed at runtime and present in the
+`icu' and `icu-locales` packages.
+
+%package -n libicu34
+Summary: International Components for Unicode (libraries)
+Group: Development/Libraries
+%description -n libicu34
+ICU is a set of C and C++ libraries that provides robust and full-featured
+Unicode support. This package contains the runtime libraries for ICU. It does
+not contain any of the data files needed at runtime and present in the
+`icu' and `icu-locales` packages.
+
+%package -n libicu-devel
+Summary: International Components for Unicode (development files)
+Group: Development/Libraries
+Requires: libicu34 = %{version}
+%description -n libicu-devel
+ICU is a set of C and C++ libraries that provides robust and full-featured
+Unicode support. This package contains the development files for ICU.
+
+%package locales
+Summary: Locale data for ICU
+Group: System Environment/Libraries
+Requires: libicu34 >= %{version}
+%description locales
+The locale data are used by ICU to provide localization (l10n),
+internationalization (i18n) and timezone support to ICU applications.
+This package also contains break data for various languages,
+and transliteration data.
+
+%post
+# Adjust the current ICU link in /usr/lib/icu
+
+icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
+cd /usr/lib/icu
+rm -f /usr/lib/icu/current
+if test x"$icucurrent" != x
+then
+ ln -s "$icucurrent" current
+fi
+
+#ICU_DATA=/usr/share/icu/%{version}
+#export ICU_DATA
+
+%preun
+# Adjust the current ICU link in /usr/lib/icu
+
+icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n -e '/\/%{version}\//d' -e 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
+cd /usr/lib/icu
+rm -f /usr/lib/icu/current
+if test x"$icucurrent" != x
+then
+ ln -s "$icucurrent" current
+fi
+
+%post -n libicu34
+ldconfig
+
+# Adjust the current ICU link in /usr/lib/icu
+
+icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
+cd /usr/lib/icu
+rm -f /usr/lib/icu/current
+if test x"$icucurrent" != x
+then
+ ln -s "$icucurrent" current
+fi
+
+%preun -n libicu34
+# Adjust the current ICU link in /usr/lib/icu
+
+icucurrent=`2>/dev/null ls -dp /usr/lib/icu/* | sed -n -e '/\/%{version}\//d' -e 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
+cd /usr/lib/icu
+rm -f /usr/lib/icu/current
+if test x"$icucurrent" != x
+then
+ ln -s "$icucurrent" current
+fi
+
+%prep
+%setup -q -n icu
+
+%build
+cd source
+chmod a+x ./configure
+CFLAGS="-O3" CXXFLAGS="-O" ./configure --prefix=/usr --sysconfdir=/etc --with-data-packaging=files --enable-shared --enable-static --disable-samples
+echo 'CPPFLAGS += -DICU_DATA_DIR=\"/usr/share/icu/%{version}\"' >> icudefs.mk
+make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
+
+%install
+rm -rf $RPM_BUILD_ROOT
+cd source
+make install DESTDIR=$RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%doc readme.html
+%doc license.html
+/usr/share/icu/%{version}/license.html
+/usr/share/icu/%{version}/icudt34l/*.cnv
+/usr/share/icu/%{version}/icudt34l/*.icu
+/usr/share/icu/%{version}/icudt34l/*.spp
+
+/usr/bin/derb
+/usr/bin/genbrk
+/usr/bin/gencnval
+/usr/bin/genrb
+/usr/bin/icu-config
+/usr/bin/makeconv
+/usr/bin/pkgdata
+/usr/bin/uconv
+
+/usr/sbin/decmn
+/usr/sbin/genccode
+/usr/sbin/gencmn
+/usr/sbin/gensprep
+/usr/sbin/genuca
+/usr/sbin/icuswap
+/usr/share/icu/%{version}/mkinstalldirs
+
+/usr/man/man1/derb.1.*
+/usr/man/man1/gencnval.1.*
+/usr/man/man1/genrb.1.*
+/usr/man/man1/icu-config.1.*
+/usr/man/man1/makeconv.1.*
+/usr/man/man1/pkgdata.1.*
+/usr/man/man1/uconv.1.*
+/usr/man/man8/decmn.8.*
+/usr/man/man8/genccode.8.*
+/usr/man/man8/gencmn.8.*
+/usr/man/man8/gensprep.8.*
+/usr/man/man8/genuca.8.*
+
+%files -n icu-locales
+/usr/share/icu/%{version}/icudt34l/*.brk
+/usr/share/icu/%{version}/icudt34l/*.res
+/usr/share/icu/%{version}/icudt34l/coll/*.res
+/usr/share/icu/%{version}/icudt34l/rbnf/*.res
+/usr/share/icu/%{version}/icudt34l/translit/*.res
+
+%files -n libicu34
+%doc license.html
+/usr/lib/libicui18n.so.34
+/usr/lib/libicui18n.so.34.0
+/usr/lib/libicutu.so.34
+/usr/lib/libicutu.so.34.0
+/usr/lib/libicuuc.so.34
+/usr/lib/libicuuc.so.34.0
+/usr/lib/libicudata.so.34
+/usr/lib/libicudata.so.34.0
+/usr/lib/libicuio.so.34
+/usr/lib/libicuio.so.34.0
+/usr/lib/libiculx.so.34
+/usr/lib/libiculx.so.34.0
+/usr/lib/libicule.so.34
+/usr/lib/libicule.so.34.0
+
+%files -n libicu-devel
+%doc readme.html
+%doc license.html
+/usr/lib/libicui18n.so
+/usr/lib/libsicui18n.a
+/usr/lib/libicuuc.so
+/usr/lib/libsicuuc.a
+/usr/lib/libicutu.so
+/usr/lib/libsicutu.a
+/usr/lib/libicuio.so
+/usr/lib/libsicuio.a
+/usr/lib/libicudata.so
+/usr/lib/libsicudata.a
+/usr/lib/libicule.so
+/usr/lib/libsicule.a
+/usr/lib/libiculx.so
+/usr/lib/libsiculx.a
+/usr/include/unicode/*.h
+/usr/include/layout/*.h
+/usr/lib/icu/%{version}/Makefile.inc
+/usr/lib/icu/Makefile.inc
+/usr/share/icu/%{version}/config
+/usr/share/doc/icu-%{version}/*
+
+%changelog
+* Mon Jun 07 2004 Alexei Dets <adets@idsk.com>
+- update to 3.0
+* Tue Aug 16 2003 Steven Loomis <srl@jtcsv.com>
+- update to 2.6.1 - include license
+* Thu Jun 05 2003 Steven Loomis <srl@jtcsv.com>
+- Update to 2.6
+* Fri Dec 27 2002 Steven Loomis <srl@jtcsv.com>
+- Update to 2.4 spec
+* Fri Sep 27 2002 Steven Loomis <srl@jtcsv.com>
+- minor updates to 2.2 spec. Rpath is off by default, don't pass it as an option.
+* Mon Sep 16 2002 Ian Holsman <ian@holsman.net>
+- update to icu 2.2
+
diff --git a/readme.html b/readme.html
new file mode 100644
index 0000000..3d4ae11
--- /dev/null
+++ b/readme.html
@@ -0,0 +1,1742 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
+ <head>
+
+ <title>ReadMe for ICU</title>
+ <meta name="COPYRIGHT" content=
+ "Copyright (c) 1997-2009 IBM Corporation and others. All Rights Reserved." />
+ <meta name="KEYWORDS" content=
+ "ICU; International Components for Unicode; ICU4C; what's new; readme; read me; introduction; downloads; downloading; building; installation;" />
+ <meta name="DESCRIPTION" content=
+ "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU." />
+ <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
+<style type="text/css">
+/*<![CDATA[*/
+ h1 {border-width: 2px; border-style: solid; text-align: center; width: 100%; font-size: 200%; font-weight: bold}
+ h2 {margin-top: 2em; text-decoration: underline; page-break-before: always}
+ h2.TOC {page-break-before: auto}
+ h3 {margin-top: 2em; text-decoration: underline}
+ h4 {text-decoration: underline}
+ h5 {text-decoration: underline}
+ caption {font-weight: bold; text-align: left}
+ div.indent {margin-left: 2em}
+ ul.TOC {list-style-type: none}
+ samp {margin-left: 1em; border-style: groove; padding: 1em; display: block; background-color: #EEEEEE}
+/*]]>*/
+</style>
+ </head>
+
+ <body>
+ <h1>International Components for Unicode<br />
+ <abbr title="International Components for Unicode">ICU</abbr> 4.2 ReadMe</h1>
+
+ <p>Version: 2009 February 19th<br />
+ Copyright © 1997-2009 International Business Machines Corporation and
+ others. All Rights Reserved.</p>
+ <!-- Remember that there is a copyright at the end too -->
+ <hr />
+
+ <h2 class="TOC">Table of Contents</h2>
+
+ <ul class="TOC">
+ <li><a href="#Introduction">Introduction</a></li>
+
+ <li><a href="#GettingStarted">Getting Started</a></li>
+
+ <li><a href="#News">What Is New In This release?</a></li>
+
+ <li><a href="#Download">How To Download the Source Code</a></li>
+
+ <li><a href="#SourceCode">ICU Source Code Organization</a></li>
+
+ <li>
+ <a href="#HowToBuild">How To Build And Install ICU</a>
+
+ <ul class="TOC">
+ <li><a href="#HowToBuildSupported">Supported Platforms</a></li>
+
+ <li><a href="#HowToBuildWindows">Windows</a></li>
+
+ <li><a href="#HowToBuildCygwin">Cygwin</a></li>
+
+ <li><a href="#HowToBuildUNIX">UNIX</a></li>
+
+ <li><a href="#HowToBuildZOS">z/OS (os/390)</a></li>
+
+ <li><a href="#HowToBuildOS400">IBM i family (IBM i, i5/OS, OS/400)</a></li>
+ </ul>
+ </li>
+
+ <li><a href="#HowToPackage">How To Package ICU</a></li>
+
+ <li>
+ <a href="#ImportantNotes">Important Notes About Using ICU</a>
+
+ <ul class="TOC">
+ <li><a href="#ImportantNotesMultithreaded">Using ICU in a Multithreaded
+ Environment</a></li>
+
+ <li><a href="#ImportantNotesWindows">Windows Platform</a></li>
+
+ <li><a href="#ImportantNotesUNIX">UNIX Type Platforms</a></li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#PlatformDependencies">Platform Dependencies</a>
+
+ <ul class="TOC">
+ <li><a href="#PlatformDependenciesNew">Porting To A New
+ Platform</a></li>
+
+ <li><a href="#PlatformDependenciesImpl">Platform Dependent
+ Implementations</a></li>
+ </ul>
+ </li>
+ </ul>
+ <hr />
+
+ <h2><a name="Introduction" href="#Introduction" id=
+ "Introduction">Introduction</a></h2>
+
+ <p>Today's software market is a global one in which it is desirable to
+ develop and maintain one application (single source/single binary) that
+ supports a wide variety of languages. The International Components for
+ Unicode (ICU) libraries provide robust and full-featured Unicode services on
+ a wide variety of platforms to help this design goal. The ICU libraries
+ provide support for:</p>
+
+ <ul>
+ <li>The latest version of the Unicode standard</li>
+
+ <li>Character set conversions with support for over 220 codepages</li>
+
+ <li>Locale data for more than 250 locales</li>
+
+ <li>Language sensitive text collation (sorting) and searching based on the
+ Unicode Collation Algorithm (=ISO 14651)</li>
+
+ <li>Regular expression matching and Unicode sets</li>
+
+ <li>Transformations for normalization, upper/lowercase, script
+ transliterations (50+ pairs)</li>
+
+ <li>Resource bundles for storing and accessing localized information</li>
+
+ <li>Date/Number/Message formatting and parsing of culture specific
+ input/output formats</li>
+
+ <li>Calendar specific date and time manipulation</li>
+
+ <li>Complex text layout for Arabic, Hebrew, Indic and Thai</li>
+
+ <li>Text boundary analysis for finding characters, word and sentence
+ boundaries</li>
+ </ul>
+
+ <p>ICU has a sister project ICU4J that extends the internationalization
+ capabilities of Java to a level similar to ICU. The ICU C/C++ project is also
+ called ICU4C when a distinction is necessary.</p>
+
+ <h2><a name="GettingStarted" href="#GettingStarted" id=
+ "GettingStarted">Getting started</a></h2>
+
+ <p>This document describes how to build and install ICU on your machine. For
+ other information about ICU please see the following table of links.<br />
+ The ICU homepage also links to related information about writing
+ internationalized software.</p>
+
+ <table border="1" cellpadding="3" width="100%" summary=
+ "These are some useful links regarding ICU and internationalization in general.">
+ <caption>
+ Here are some useful links regarding ICU and internationalization in
+ general.
+ </caption>
+
+ <tr>
+ <td>ICU, ICU4C & ICU4J Homepage</td>
+
+ <td><a href=
+ "http://www.icu-project.org/">http://www.icu-project.org/</a></td>
+ </tr>
+
+ <tr>
+ <td>FAQ - Frequently Asked Questions about ICU</td>
+
+ <td><a href=
+ "http://www.icu-project.org/userguide/icufaq.html">http://www.icu-project.org/userguide/icufaq.html</a></td>
+ </tr>
+
+ <tr>
+ <td>ICU User's Guide</td>
+
+ <td><a href=
+ "http://www.icu-project.org/userguide/">http://www.icu-project.org/userguide/</a></td>
+ </tr>
+
+ <tr>
+ <td>Download ICU Releases</td>
+
+ <td><a href=
+ "http://www.icu-project.org/download/">http://www.icu-project.org/download/</a></td>
+ </tr>
+
+ <tr>
+ <td>ICU4C API Documentation Online</td>
+
+ <td><a href=
+ "http://www.icu-project.org/apiref/icu4c/">http://www.icu-project.org/apiref/icu4c/</a></td>
+ </tr>
+
+ <tr>
+ <td>Online ICU Demos</td>
+
+ <td><a href=
+ "http://demo.icu-project.org/icu-bin/icudemos">http://demo.icu-project.org/icu-bin/icudemos</a></td>
+ </tr>
+
+ <tr>
+ <td>Contacts and Bug Reports/Feature Requests</td>
+
+ <td><a href=
+ "http://www.icu-project.org/contacts.html">http://www.icu-project.org/contacts.html</a></td>
+ </tr>
+ </table>
+
+ <p><strong>Important:</strong> Please make sure you understand the <a href=
+ "license.html">Copyright and License Information</a>.</p>
+
+ <h2><a name="News" href="#News" id="News">What is new in this
+ release?</a></h2>
+
+ <p>To see which APIs are new or changed in this release, view the <a href="APIChangeReport.html">ICU4C API Change Report</a>. </p>
+
+
+ <p><!-- The following list concentrates on <em>changes that affect existing
+ applications migrating from previous ICU releases</em>. --> For more news about
+ this release, see the <a href="http://www.icu-project.org/download/">ICU 4.2
+ download page</a>.</p>
+
+ <h3>u_strToUTF32() and u_strFromUTF32() validate input UTF strings</h3>
+ <p>
+ Before ICU 4.2, the ustring.h functions u_strToUTF32() and u_strFromUTF32()
+ were not fully validating their input strings.
+ In particular, u_strToUTF32() passed unpaired surrogates through as
+ surrogate code points, and u_strFromUTF32() accepted surrogate code points
+ and passed them through as unpaired surrogates
+ (which may by chance end up in a pair,
+ indistinguishable from a supplementary code point).
+ This is inconsistent with the function names,
+ with the use of "UTF-16" and "UTF-32" in the documentation,
+ and with their sibling UTF-8 functions which do validate fully.
+ </p>
+
+ <p>
+ ICU 4.2 changes the u_strToUTF32() and u_strFromUTF32() implementations
+ to treat malformed UTF input as an error.
+ The API documentation has been clarified.
+ </p>
+
+ <p>
+ Background: The implementation of these functions predates
+ Unicode's tightening of the UTF specifications.
+ We adapted the UTF-8 ustring.h functions and the ucnv_ converter functions
+ but not these UTF-32 ustring.h functions.
+ See the Unicode Standard chapter 3
+ <a href="http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf#G7404">section 3.9 Unicode Encoding Forms</a>
+ for details, in particular definitions D79 Unicode encoding form
+ and D80 Unicode string.
+ </p>
+
+ <h2><a name="Download" href="#Download" id="Download">How To Download the
+ Source Code</a></h2>
+
+ <p>There are two ways to download ICU releases:</p>
+
+ <ul>
+ <li><strong>Official Release Snapshot:</strong><br />
+ If you want to use ICU (as opposed to developing it), you should download
+ an official packaged version of the ICU source code. These versions are
+ tested more thoroughly than day-to-day development builds of the system,
+ and they are packaged in zip and tar files for convenient download. These
+ packaged files can be found at <a href=
+ "http://www.icu-project.org/download/">http://www.icu-project.org/download/</a>.<br />
+ The packaged snapshots are named <strong>icu-nnnn.zip</strong> or
+ <strong>icu-nnnn.tgz</strong>, where nnnn is the version number. The .zip
+ file is used for Windows platforms, while the .tgz file is preferred on
+ most other platforms.<br />
+ Please unzip this file. </li>
+
+ <li><strong>Subversion Source Repository:</strong><br />
+ If you are interested in developing features, patches, or bug fixes for
+ ICU, you should probably be working with the latest version of the ICU
+ source code. You will need to check the code out of our Subversion repository to
+ ensure that you have the most recent version of all of the files. See our
+ <a href="http://www.icu-project.org/repository/">source
+ repository</a> for details.</li>
+ </ul>
+
+ <h2><a name="SourceCode" href="#SourceCode" id="SourceCode">ICU Source Code
+ Organization</a></h2>
+
+ <p>In the descriptions below, <strong><i><ICU></i></strong> is the full
+ path name of the ICU directory (the top level directory from the distribution
+ archives) in your file system. You can also view the <a href=
+ "http://www.icu-project.org/userguide/design.html">ICU Architectural
+ Design</a> section of the User's Guide to see which libraries you need for
+ your software product. You need at least the data (<code>[lib]icudt</code>)
+ and the common (<code>[lib]icuuc</code>) libraries in order to use ICU.</p>
+
+ <table border="1" cellpadding="0" width="100%" summary=
+ "The following files describe the code drop.">
+ <caption>
+ The following files describe the code drop.
+ </caption>
+
+ <tr>
+ <th scope="col">File</th>
+
+ <th scope="col">Description</th>
+ </tr>
+
+ <tr>
+ <td>readme.html</td>
+
+ <td>Describes the International Components for Unicode (this file)</td>
+ </tr>
+
+ <tr>
+ <td>license.html</td>
+
+ <td>Contains the text of the ICU license</td>
+ </tr>
+ </table>
+
+ <p><br />
+ </p>
+
+ <table border="1" cellpadding="0" width="100%" summary=
+ "The following directories contain source code and data files.">
+ <caption>
+ The following directories contain source code and data files.
+ </caption>
+
+ <tr>
+ <th scope="col">Directory</th>
+
+ <th scope="col">Description</th>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>common</b>/</td>
+
+ <td>The core Unicode and support functionality, such as resource bundles,
+ character properties, locales, codepage conversion, normalization,
+ Unicode properties, Locale, and UnicodeString.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>i18n</b>/</td>
+
+ <td>Modules in i18n are generally the more data-driven, that is to say
+ resource bundle driven, components. These deal with higher-level
+ internationalization issues such as formatting, collation, text break
+ analysis, and transliteration.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>layout</b>/</td>
+
+ <td>Contains the ICU layout engine (not a rasterizer).</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>io</b>/</td>
+
+ <td>Contains the ICU I/O library.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>data</b>/</td>
+
+ <td>
+ <p>This directory contains the source data in text format, which is
+ compiled into binary form during the ICU build process. It contains
+ several subdirectories, in which the data files are grouped by
+ function. Note that the build process must be run again after any
+ changes are made to this directory.</p>
+
+ <p>If some of the following directories are missing, it's probably
+ because you got an official download. If you need the data source files
+ for customization, then please download the ICU source code from <a
+ href="http://www.icu-project.org/repository/">subversion</a>.</p>
+
+ <ul>
+ <li><b>in/</b> A directory that contains a pre-built data library for
+ ICU. A standard source code package will contain this file without
+ several of the following directories. This is to simplify the build
+ process for the majority of users and to reduce platform porting
+ issues.</li>
+
+ <li><b>brkitr/</b> Data files for character, word, sentence, title
+ casing and line boundary analysis.</li>
+
+ <li><b>locales/</b> These .txt files contain ICU language and
+ culture-specific localization data. Two special bundles are
+ <b>root</b>, which is the fallback data and parent of other bundles,
+ and <b>index</b>, which contains a list of installed bundles. The
+ makefile <b>resfiles.mk</b> contains the list of resource bundle
+ files.</li>
+
+ <li><b>mappings/</b> Here are the code page converter tables. These
+ .ucm files contain mappings to and from Unicode. These are compiled
+ into .cnv files. <b>convrtrs.txt</b> is the alias mapping table from
+ various converter name formats to ICU internal format and vice versa.
+ It produces cnvalias.icu. The makefiles <b>ucmfiles.mk,
+ ucmcore.mk,</b> and <b>ucmebcdic.mk</b> contain the list of
+ converters to be built.</li>
+
+ <li><b>translit/</b> This directory contains transliterator rules as
+ resource bundles, a makefile <b>trnsfiles.mk</b> containing the list
+ of installed system translitaration files, and as well the special
+ bundle <b>translit_index</b> which lists the system transliterator
+ aliases.</li>
+
+ <li><b>unidata/</b> This directory contains the Unicode data files.
+ Please see <a href=
+ "http://www.unicode.org/">http://www.unicode.org/</a> for more
+ information.</li>
+
+ <li><b>misc/</b> The misc directory contains other data files which
+ did not fit into the above categories. Currently it only contains
+ time zone information, and a name preperation file for <a href=
+ "http://www.ietf.org/rfc/rfc3490.txt">IDNA</a>.</li>
+
+ <li><b>out/</b> This directory contains the assembled memory mapped
+ files.</li>
+
+ <li><b>out/build/</b> This directory contains intermediate (compiled)
+ files, such as .cnv, .res, etc.</li>
+ </ul>
+
+ <p>If you are creating a special ICU build, you can set the ICU_DATA
+ environment variable to the out/ or the out/build/ directories, but
+ this is generally discouraged because most people set it incorrectly.
+ You can view the <a href=
+ "http://www.icu-project.org/userguide/icudata.html">ICU Data
+ Management</a> section of the ICU User's Guide for details.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/test/<b>intltest</b>/</td>
+
+ <td>A test suite including all C++ APIs. For information about running
+ the test suite, see the build instructions specific to your platform
+ later in this document.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/test/<b>cintltst</b>/</td>
+
+ <td>A test suite written in C, including all C APIs. For information
+ about running the test suite, see the build instructions specific to your
+ platform later in this document.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/test/<b>iotest</b>/</td>
+
+ <td>A test suite written in C and C++ to test the icuio library. For
+ information about running the test suite, see the build instructions
+ specific to your platform later in this document.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/test/<b>testdata</b>/</td>
+
+ <td>Source text files for data, which are read by the tests. It contains
+ the subdirectories <b>out/build/</b> which is used for intermediate
+ files, and <b>out/</b> which contains <b>testdata.dat.</b></td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>tools</b>/</td>
+
+ <td>Tools for generating the data files. Data files are generated by
+ invoking <i><ICU></i>/source/data/build/makedata.bat on Win32 or
+ <i><ICU></i>/source/make on UNIX.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>samples</b>/</td>
+
+ <td>Various sample programs that use ICU</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>extra</b>/</td>
+
+ <td>Non-supported API additions. Currently, it contains the 'uconv' tool
+ to perform codepage conversion on files.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/<b>packaging</b>/</td>
+
+ <td>This directory contain scripts and tools for packaging the final
+ ICU build for various release platforms.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>config</b>/</td>
+
+ <td>Contains helper makefiles for platform specific build commands. Used
+ by 'configure'.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/source/<b>allinone</b>/</td>
+
+ <td>Contains top-level ICU workspace and project files, for instance to
+ build all of ICU under one MSVC project.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/<b>include</b>/</td>
+
+ <td>Contains the headers needed for developing software that uses ICU on
+ Windows.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/<b>lib</b>/</td>
+
+ <td>Contains the import libraries for linking ICU into your Windows
+ application.</td>
+ </tr>
+
+ <tr>
+ <td><i><ICU></i>/<b>bin</b>/</td>
+
+ <td>Contains the libraries and executables for using ICU on Windows.</td>
+ </tr>
+ </table>
+ <!-- end of ICU structure ==================================== -->
+
+ <h2><a name="HowToBuild" href="#HowToBuild" id="HowToBuild">How To Build And
+ Install ICU</a></h2>
+
+ <h3><a name="HowToBuildSupported" href="#HowToBuildSupported" id=
+ "HowToBuildSupported">Supported Platforms</a></h3>
+
+ <table border="1" cellpadding="3" summary=
+ "ICU can be built on many platforms.">
+ <caption>
+ Here is a status of functionality of ICU on several different platforms.
+ </caption>
+
+ <tr>
+ <th scope="col">Operating system</th>
+
+ <th scope="col">Compiler</th>
+
+ <th scope="col">Testing frequency</th>
+ </tr>
+
+ <tr>
+ <td>Windows Vista SP1 (32 bit)</td>
+
+ <td>Microsoft Visual C++ 2005 (8.0)</td>
+
+ <td>Reference platform</td>
+ </tr>
+ <tr>
+ <td>Windows Server 2003 (64 bit)</td>
+
+ <td>Microsoft Visual C++ 2005 (8.0)</td>
+
+ <td>Reference platform</td>
+ </tr>
+
+ <tr>
+ <td>Red Hat Enterprise Linux 5 (x86, 32 bit)</td>
+
+ <td>gcc 4.1.2</td>
+
+ <td>Reference platform</td>
+ </tr>
+
+ <tr>
+ <td>AIX 6.1 (Power, 64-bit)</td>
+
+ <td>IBM VisualAge 9</td>
+
+ <td>Reference platform</td>
+ </tr>
+
+ <tr>
+ <td>Solaris 10 (Sparc, 32-bit, SunOS 5.10)</td>
+
+ <td>Sun Studio 12 <!--(Sun C++ 5.8)--></td>
+
+ <td>Reference platform</td>
+ </tr>
+
+ <tr>
+ <td>HP-UX IIiv3 (Itanium, 64-bit)</td>
+
+ <td>aCC A.6.14</td>
+
+ <td>Reference platform</td>
+ </tr>
+ <tr>
+ <td>AIX 5.3</td>
+
+ <td>IBM XL C/C++ 8.0</td>
+
+ <td>Regularly tested</td>
+ </tr>
+ <tr>
+ <td>Windows XP</td>
+
+ <td>Microsoft Visual C++ 2005 (8.0)</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>Red Hat Enterprise Linux 4 Update 4</td>
+
+ <td>gcc 3.4.4</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>AIX 5.2</td>
+
+ <td>Visual Age C++ 6.0</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>Solaris 9 (SunOS 5.9)</td>
+
+ <td>Sun Studio 8 (Sun C++ 5.5)</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>HP-UX 11.11 (PA-RISC)</td>
+
+ <td>aCC A.03.50<br />
+ cc B.11.11.08</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>Windows 2000 with Cygwin</td>
+
+ <td>Microsoft Visual C++ 2003 (7.1)</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>Windows Server 2008 x64</td>
+
+ <td>Microsoft Visual C++ 2005 (8.0)</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>Mac OS X (10.4)</td>
+
+ <td>gcc 4.0.1</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>Solaris 10</td>
+
+ <td>gcc 4.0.3</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>SUSE Linux Enterprise Server 9 SP1</td>
+
+ <td>Intel C++ Compiler 9.0</td>
+
+ <td>Regularly tested</td>
+ </tr>
+
+ <tr>
+ <td>z/OS 1.7</td>
+
+ <td>cxx 1.7</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>Cygwin</td>
+
+ <td>gcc 3.4.4</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>IBM i family (IBM i, i5/OS, OS/400)</td>
+
+ <td>iCC</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>Windows Vista x64</td>
+
+ <td>Microsoft Visual C++ 2005 (8.0)</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>MinGW</td>
+
+ <td>gcc</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>NetBSD, OpenBSD, FreeBSD</td>
+
+ <td>gcc</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>SUSE Linux Enterprise Server 9 (PowerPC)</td>
+
+ <td>IBM XL C/C++ 8.0</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>QNX</td>
+
+ <td>gcc</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>BeOS</td>
+
+ <td>gcc</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>SGI/IRIX</td>
+
+ <td>MIPSpro CC</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>Tru64 (OSF)</td>
+
+ <td>Compaq's cxx compiler</td>
+
+ <td>Rarely tested</td>
+ </tr>
+
+ <tr>
+ <td>MP-RAS</td>
+
+ <td>NCR MP-RAS C/C++ Compiler</td>
+
+ <td>Rarely tested</td>
+ </tr>
+ </table>
+
+ <p><br />
+ </p>
+
+ <h4>Key to testing frequency</h4>
+
+ <dl>
+ <dt><i>Reference platform</i></dt>
+
+ <dd>ICU will work on these platforms with these compilers</dd>
+
+ <dt><i>Regularly tested</i></dt>
+
+ <dd>ICU should work on these platforms with these compilers</dd>
+
+ <dt><i>Rarely tested</i></dt>
+
+ <dd>ICU has been ported to these platforms but may not have been tested
+ there recently</dd>
+ </dl>
+
+ <h3><a name="HowToBuildWindows" href="#HowToBuildWindows" id=
+ "HowToBuildWindows">How To Build And Install On Windows</a></h3>
+
+ <p>Building International Components for Unicode requires:</p>
+
+ <ul>
+ <li>Microsoft Windows 2000 or above</li>
+
+ <li>Microsoft Visual C++ 2005</li>
+
+ <li><a href="#HowToBuildCygwin">Cygwin</a> is required when other versions
+ of Microsoft Visual C++ and other compilers are used to build ICU.</li>
+ </ul>
+
+ <p>The steps are:</p>
+
+ <ol>
+ <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
+ line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
+ WinZip.</li>
+
+ <li>Be sure that the ICU binary directory, <i><ICU></i>\bin\, is
+ included in the <strong>PATH</strong> environment variable. The tests will
+ not work without the location of the ICU DLL files in the path.</li>
+
+ <li>Open the "<i><ICU></i>\source\allinone\allinone.sln" workspace
+ file in Microsoft Visual Studio 2003. (This solution includes all the
+ International Components for Unicode libraries, necessary ICU building
+ tools, and the test suite projects). Please see the <a href=
+ "#HowToBuildWindowsCommandLine">command line note below</a> if you want to
+ build from the command line instead.</li>
+
+ <li>Set the active platform to "Win32" or "x64" (See <a href="#HowToBuildWindowsPlatform">Windows platform note</a> below)
+ and configuration to "Debug" or "Release" (See <a href="#HowToBuildWindowsConfig">Windows configuration note</a> below).</li>
+
+ <li>Choose the "Build" menu and select "Rebuild Solution". If you want to
+ build the Debug and Release at the same time, see the <a href=
+ "#HowToBuildWindowsBatch">batch configuration note</a> below.</li>
+
+ <li>Run the C++ test suite, "intltest". To do this: set the active startup
+ project to "intltest", and press Ctrl+F5 to run it. Make sure that it
+ passes without any errors.</li>
+
+ <li>Run the C test suite, "cintltst". To do this: set the active startup
+ project to "cintltst", and press Ctrl+F5 to run it. Make sure that it
+ passes without any errors.</li>
+
+ <li>Run the I/O test suite, "iotest". To do this: set the active startup
+ project to "iotest", and press Ctrl+F5 to run it. Make sure that it passes
+ without any errors.</li>
+
+ <li>You are now able to develop applications with ICU by using the
+ libraries and tools in <i><ICU></i>\bin\. The headers are in
+ <i><ICU></i>\include\ and the link libraries are in
+ <i><ICU></i>\lib\. To install the ICU runtime on a machine, or ship
+ it with your application, copy the needed components from
+ <i><ICU></i>\bin\ to a location on the system PATH or to your
+ application directory.</li>
+ </ol>
+
+ <p><a name="HowToBuildWindowsCommandLine" id=
+ "HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line
+ Note:</strong></a> You can build ICU from the command line. Assuming that you
+ have properly installed Microsoft Visual C++ to support command line
+ execution, you can run the following command, 'devenv.com
+ <i><ICU></i>\source\allinone\allinone.sln /build "Win32|Release"'. You can also
+ use Cygwin with this compiler to build ICU, and you can refer to the <a href=
+ "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a>
+ section for more details.</p>
+
+ <p><a name="HowToBuildWindowsPlatform" id=
+ "HowToBuildWindowsPlatform"><strong>Setting Active Platform
+ Note:</strong></a> Even though you are able to select "x64" as the active platform, if your operating system is
+ not a 64 bit version of Windows, the build will fail. To set the active platform, two different possibilities are:</p>
+
+ <ul>
+ <li>Choose "Build" menu, select "Configuration Manager...", and select
+ "Win32" or "x64" for the Active Platform Solution.</li>
+
+ <li>Another way is to select the desired build configuration from "Solution
+ Platforms" dropdown menu from the standard toolbar. It will say
+ "Win32" or "x64" in the dropdown list.</li>
+ </ul>
+
+ <p><a name="HowToBuildWindowsConfig" id=
+ "HowToBuildWindowsConfig"><strong>Setting Active Configuration
+ Note:</strong></a> To set the active configuration, two different
+ possibilities are:</p>
+
+ <ul>
+ <li>Choose "Build" menu, select "Configuration Manager...", and select
+ "Release" or "Debug" for the Active Configuration Solution.</li>
+
+ <li>Another way is to select the desired build configuration from "Solution
+ Configurations" dropdown menu from the standard toolbar. It will say
+ "Release" or "Debug" in the dropdown list.</li>
+ </ul>
+
+ <p><a name="HowToBuildWindowsBatch" id="HowToBuildWindowsBatch"><strong>Batch
+ Configuration Note:</strong></a> If you want to build the Win32 and x64 platforms and
+ Debug and Release configurations at the same time, choose "Build" menu, and select "Batch
+ Build...". Click the "Select All" button, and then click the "Rebuild"
+ button.</p>
+
+ <h3><a name="HowToBuildCygwin" href="#HowToBuildCygwin" id=
+ "HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a></h3>
+
+ <p>Building International Components for Unicode with this configuration
+ requires:</p>
+
+ <ul>
+ <li>Microsoft 2000 or above</li>
+
+ <li>Microsoft Visual C++ 2003 or above (when gcc isn't used).</li>
+
+ <li>
+ Cygwin with the following installed:
+
+ <ul>
+ <li>bash</li>
+
+ <li>GNU make</li>
+
+ <li>man (if you plan to look at the man pages)</li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>There are two ways you can build ICU with Cygwin. You can build with gcc
+ or Microsoft Visual C++. If you use gcc, the resulting libraries and tools
+ will depend on the Cygwin environment. If you use Microsoft Visual C++, the
+ resulting libraries and tools do not depend on Cygwin and can be more easily
+ distributed to other Windows computers (the generated man pages and shell
+ scripts still need Cygwin). To build with gcc, please follow the "<a href=
+ "#HowToBuildUNIX">How To Build And Install On UNIX</a>" instructions, while
+ you are inside a Cygwin bash shell. To build with Microsoft Visual C++,
+ please use the following instructions:</p>
+
+ <ol>
+ <li>Start the Windows "Command Prompt" window. This is different from the
+ gcc build, which requires the Cygwin Bash command prompt. The Microsoft
+ Visual C++ compiler will not work with a bash command prompt.</li>
+
+ <li>If the computer isn't set up to use Visual C++ from the command line,
+ you need to run vcvars32.bat. For example "<tt>C:\Program Files\Microsoft
+ Visual Studio 8\VC\bin\vcvars32.bat</tt>" can be used for 32-bit builds
+ <strong>or</strong> "<tt>C:\Program Files (x86)\Microsoft Visual Studio
+ 8\VC\bin\amd64\vcvarsamd64.bat</tt>" can be used for 64-bit builds on
+ Windows x64.</li>
+
+ <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
+ line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
+ WinZip.</li>
+
+ <li>Change directory to "icu/source", which is where you unzipped ICU.</li>
+
+ <li>Run "<tt>bash <a href="source/runConfigureICU">./runConfigureICU</a>
+ Cygwin/MSVC</tt>" (See <a href="#HowToWindowsConfigureICU">Windows
+ configuration note</a> and non-functional configure options below).</li>
+
+ <li>Type <tt>"make"</tt> to compile the libraries and all the data files.
+ This make command should be GNU make.</li>
+
+ <li>Optionally, type <tt>"make check"</tt> to run the test suite, which
+ checks for ICU's functionality integrity (See <a href=
+ "#HowToTestWithoutGmake">testing note</a> below).</li>
+
+ <li>Type <tt>"make install"</tt> to install ICU. If you used the --prefix=
+ option on configure or runConfigureICU, ICU will be installed to the
+ directory you specified. (See <a href="#HowToInstallICU">installation
+ note</a> below).</li>
+ </ol>
+
+ <p><a name="HowToWindowsConfigureICU" id=
+ "HowToWindowsConfigureICU"><strong>Configuring ICU on Windows
+ NOTE:</strong></a> In addition to the Unix <a href=
+ "#HowToConfigureICU">configuration note</a> the following configure options
+ currently do not work on Windows with Microsoft's compiler. Some options can
+ work by manually editing <tt>icu/source/common/unicode/pwin32.h</tt>, but
+ manually editing the files is not recommended.</p>
+
+ <ul>
+ <li><tt>--disable-renaming</tt></li>
+
+ <li><tt>--disable-threading</tt></li>
+
+ <li><tt>--enable-tracing</tt></li>
+
+ <li><tt>--enable-rpath</tt></li>
+
+ <li><tt>--with-iostream</tt></li>
+
+ <li><tt>--enable-static</tt> (Requires that U_STATIC_IMPLEMENTATION be
+ defined in user code that links against ICU's static libraries.)</li>
+
+ <li><tt>--with-data-packaging=files</tt> (The pkgdata tool currently does
+ not work in this mode. Manual packaging is required to use this mode.)</li>
+ </ul>
+
+ <h3><a name="HowToBuildUNIX" href="#HowToBuildUNIX" id="HowToBuildUNIX">How
+ To Build And Install On UNIX</a></h3>
+
+ <p>Building International Components for Unicode on UNIX requires:</p>
+
+ <ul>
+ <li>A C++ compiler installed on the target machine (for example: gcc, CC,
+ xlC_r, aCC, cxx, etc...).</li>
+
+ <li>An ANSI C compiler installed on the target machine (for example:
+ cc).</li>
+
+ <li>A recent version of GNU make (3.80+).</li>
+
+ <li>For a list of z/OS tools please view the <a href="#HowToBuildZOS">z/OS
+ build section</a> of this document for further details.</li>
+ </ul>
+
+ <p>Here are the steps to build ICU:</p>
+
+ <ol>
+ <li>Decompress the icu-<i>X</i>.<i>Y</i>.tgz (or
+ icu-<i>X</i>.<i>Y</i>.tar.gz) file. For example, <tt>"gunzip -d <
+ icu-<i>X</i>.<i>Y</i>.tgz | tar xvf -"</tt></li>
+
+ <li>Change directory to the "icu/source".</li>
+
+ <li>Run <tt>"chmod +x runConfigureICU configure install-sh"</tt> because
+ these files may have the wrong permissions.</li>
+
+ <li>Run the <tt><a href="source/runConfigureICU">runConfigureICU</a></tt>
+ script for your platform. (See <a href="#HowToConfigureICU">configuration
+ note</a> below).</li>
+
+ <li>Type <tt>"gmake"</tt> (or "make" if GNU make is the default make on
+ your platform) to compile the libraries and all the data files. The proper
+ name of the GNU make command is printed at the end of the configuration
+ run, as in "You must use gmake to compile ICU".</li>
+
+ <li>Optionally, type <tt>"gmake check"</tt> to run the test suite, which
+ checks for ICU's functionality integrity (See <a href=
+ "#HowToTestWithoutGmake">testing note</a> below).</li>
+
+ <li>Type <tt>"gmake install"</tt> to install ICU. If you used the --prefix=
+ option on configure or runConfigureICU, ICU will be installed to the
+ directory you specified. (See <a href="#HowToInstallICU">installation
+ note</a> below).</li>
+ </ol>
+
+ <p><a name="HowToConfigureICU" id="HowToConfigureICU"><strong>Configuring ICU
+ NOTE:</strong></a> Type <tt>"./runConfigureICU --help"</tt> for help on how
+ to run it and a list of supported platforms. You may also want to type
+ <tt>"./configure --help"</tt> to print the available configure options that
+ you may want to give runConfigureICU. If you are not using the
+ runConfigureICU script, or your platform is not supported by the script, you
+ may need to set your CC, CXX, CFLAGS and CXXFLAGS environment variables, and
+ type <tt>"./configure"</tt>. Some of the more frequently used options to
+ configure are --disable-64bit-libs to create 32-bit libraries, and --srcdir
+ to do out of source builds (build the libraries in the current location).
+ HP-UX user's, please see this <a href="#ImportantNotesHPUX">note regarding
+ HP-UX multithreaded build issues</a> with newer compilers. Solaris users,
+ please see this <a href="#ImportantNotesSolaris">note regarding Solaris
+ multithreaded build issues</a>.</p>
+
+ <p>ICU is built with strict compiler warnings enabled by default. If this
+ causes excessive numbers of warnings on your platform, use the --disable-strict
+ option to configure to reduce the warning level.</p>
+
+ <p><a name="HowToTestWithoutGmake" id="HowToTestWithoutGmake"><strong>Running
+ The Tests From The Command Line NOTE:</strong></a> You may have to set
+ certain variables if you with to run test programs individually, that is
+ apart from "gmake check". The environment variable <strong>ICU_DATA</strong>
+ can be set to the full pathname of the data directory to indicate where the
+ locale data files and conversion mapping tables are when you are not using
+ the shared library (e.g. by using the .dat archive or the individual data
+ files). The trailing "/" is required after the directory name (e.g.
+ "$Root/source/data/out/" will work, but the value "$Root/source/data/out" is
+ not acceptable). You do not need to set <strong>ICU_DATA</strong> if the
+ complete shared data library is in your library path.</p>
+
+ <p><a name="HowToInstallICU" id="HowToInstallICU"><strong>Installing ICU
+ NOTE:</strong></a> Some platforms use package management tools to control the
+ installation and uninstallation of files on the system, as well as the
+ integrity of the system configuration. You may want to check if ICU can be
+ packaged for your package management tools by looking into the "packaging"
+ directory. (Please note that if you are using a snapshot of ICU from Subversion, it
+ is probable that the packaging scripts or related files are not up to date
+ with the contents of ICU at this time, so use them with caution).</p>
+
+ <h3><a name="HowToBuildZOS" href="#HowToBuildZOS" id="HowToBuildZOS">How To
+ Build And Install On z/OS (OS/390)</a></h3>
+
+ <p>You can install ICU on z/OS or OS/390 (the previous name of z/OS), but IBM
+ tests only the z/OS installation. You install ICU in a z/OS UNIX system
+ services file system such as HFS or zFS. On this platform, it is important
+ that you understand a few details:</p>
+
+ <ul>
+ <li>The makedep and GNU make tools are required for building ICU. If it
+ is not already installed on your system, it is available at the <a href=
+ "http://www.ibm.com/servers/eserver/zseries/zos/unix/redbook/">z/OS UNIX -
+ Tools and Toys</a> site. The PATH environment variable should be updated to
+ contain the location of this executable prior to build. Failure to add these
+ tools to your PATH will cause ICU build failures or cause pkgdata to fail
+ to run.</li>
+
+ <li>Since USS does not support using the mmap() function over NFS, it is
+ recommended that you build ICU on a local filesystem. Once ICU has been
+ built, you should not have this problem while using ICU when the data
+ library has been built as a shared library, which is this is the default
+ setting.</li>
+
+ <li>Encoding considerations: The source code assumes that it is compiled
+ with codepage ibm-1047 (to be exact, the UNIX System Services variant of
+ it). The pax command converts all of the source code files from ASCII to
+ codepage ibm-1047 (USS) EBCDIC. However, some files are binary files and
+ must not be converted, or must be converted back to their original state.
+ You can use the <a href="as_is/os390/unpax-icu.sh">unpax-icu.sh</a> script
+ to do this for you automatically. It will unpackage the tar file and
+ convert all the necessary files for you automatically.</li>
+
+ <li>z/OS supports both native S/390 hexadecimal floating point and (with
+ OS/390 2.6 and later) IEEE 754 binary floating point. This is a compile
+ time option. Applications built with IEEE should use ICU DLLs that are
+ built with IEEE (and vice versa). The environment variable IEEE390=0 will
+ cause the z/OS version of ICU to be built without IEEE floating point
+ support and use the native hexadecimal floating point. By default ICU is
+ built with IEEE 754 support. Native floating point support is sufficient
+ for codepage conversion, resource bundle and UnicodeString operations, but
+ the Format APIs require IEEE binary floating point.</li>
+
+ <li>z/OS introduced the concept of Extra Performance Linkage (XPLINK) to
+ bring performance improvement opportunities to call-intensive C and C++
+ applications such as ICU. XPLINK is enabled on a DLL-by-DLL basis, so if
+ you are considering using XPLINK in your application that uses ICU, you
+ should consider building the XPLINK-enabled version of ICU. You need to
+ set ICU's environment variable <code>OS390_XPLINK=1</code> prior to
+ invoking the make process to produce binaries that are enabled for
+ XPLINK. The XPLINK option, which is available for z/OS 1.2 and later,
+ requires the PTF PQ69418 to build XPLINK enabled binaries.</li>
+
+ <li>Currently in ICU 3.0, there is an issue with building on z/OS without
+ XPLINK and with the C++ iostream. By default, the iostream library on z/OS
+ is XPLINK enabled. If you are not building an XPLINK enabled version of
+ ICU, you should use the <code>--with-iostream=old</code> configure option
+ when using runConfigureICU. This will prevent applications that use the
+ icuio library from crashing.</li>
+
+ <li>The rest of the instructions for building and testing ICU on z/OS with
+ UNIX System Services are the same as the <a href="#HowToBuildUNIX">How To
+ Build And Install On UNIX</a> section.</li>
+ </ul>
+
+ <h4>z/OS (Batch/PDS) support outside the UNIX system services
+ environment</h4>
+
+ <p>By default, ICU builds its libraries into the UNIX file system (HFS). In
+ addition, there is a z/OS specific environment variable (OS390BATCH) to build
+ some libraries into the z/OS native file system. This is useful, for example,
+ when your application is externalized via Job Control Language (JCL).</p>
+
+ <p>The OS390BATCH environment variable enables non-UNIX support including the
+ batch environment. When OS390BATCH is set, the libicui18n<i>XX</i>.dll,
+ libicuuc<i>XX</i>.dll, and libicudt<i>XX</i>e.dll binaries are built into
+ data sets (the native file system). Turning on OS390BATCH does not turn off
+ the normal z/OS UNIX build. This means that the z/OS UNIX (HFS) DLLs will
+ always be created.</p>
+
+ <p>Two additional environment variables indicate the names of the z/OS data
+ sets to use. The LOADMOD environment variable identifies the name of the data
+ set that contains the dynamic link libraries (DLLs) and the LOADEXP
+ environment variable identifies the name of the data set that contains the
+ side decks, which are normally the files with the .x suffix in the UNIX file
+ system.</p>
+
+ <p>A data set is roughly equivalent to a UNIX or Windows file. For most kinds
+ of data sets the operating system maintains record boundaries. UNIX and
+ Windows files are byte streams. Two kinds of data sets are PDS and PDSE. Each
+ data set of these two types contains a directory. It is like a UNIX
+ directory. Each "file" is called a "member". Each member name is limited to
+ eight bytes, normally EBCDIC.</p>
+
+ <p>Here is an example of some environment variables that you can set prior to
+ building ICU:</p>
+<pre>
+<samp>OS390BATCH=1
+LOADMOD=<i>USER</i>.ICU.LOAD
+LOADEXP=<i>USER</i>.ICU.EXP</samp>
+</pre>
+
+ <p>The PDS member names for the DLL file names are as follows:</p>
+<pre>
+<samp>IXMI<i>XX</i>IN --> libicui18n<i>XX</i>.dll
+IXMI<i>XX</i>UC --> libicuuc<i>XX</i>.dll
+IXMI<i>XX</i>DA --> libicudt<i>XX</i>e.dll</samp>
+</pre>
+
+ <p>You should point the LOADMOD environment variable at a partitioned data
+ set extended (PDSE) and point the LOADEXP environment variable at a
+ partitioned data set (PDS). The PDSE can be allocated with the following
+ attributes:</p>
+<pre>
+<samp>Data Set Name . . . : <i>USER</i>.ICU.LOAD
+Management class. . : <i>**None**</i>
+Storage class . . . : <i>BASE</i>
+Volume serial . . . : <i>TSO007</i>
+Device type . . . . : <i>3390</i>
+Data class. . . . . : <i>LOAD</i>
+Organization . . . : PO
+Record format . . . : U
+Record length . . . : 0
+Block size . . . . : <i>32760</i>
+1st extent cylinders: 1
+Secondary cylinders : 5
+Data set name type : LIBRARY</samp>
+</pre>
+
+ <p>The PDS can be allocated with the following attributes:</p>
+<pre>
+<samp>Data Set Name . . . : <i>USER</i>.ICU.EXP
+Management class. . : <i>**None**</i>
+Storage class . . . : <i>BASE</i>
+Volume serial . . . : <i>TSO007</i>
+Device type . . . . : <i>3390</i>
+Data class. . . . . : <i>**None**</i>
+Organization . . . : PO
+Record format . . . : FB
+Record length . . . : 80
+Block size . . . . : <i>3200</i>
+1st extent cylinders: 3
+Secondary cylinders : 3
+Data set name type : PDS</samp>
+</pre>
+
+ <h3><a name="HowToBuildOS400" href="#HowToBuildOS400" id=
+ "HowToBuildOS400">How To Build And Install On The IBM i Family (IBM i, i5/OS OS/400)</a></h3>
+
+ <p>Before you start building ICU, ICU requires the following:</p>
+
+ <ul>
+ <li>QSHELL interpreter installed (install base option 30, operating system)
+ <!--li>QShell Utilities, PRPQ 5799-XEH (not required for V4R5)</li--></li>
+
+ <li>ILE C/C++ Compiler installed on the system
+
+ <li>The latest GNU facilities (You can get the GNU facilities
+ from <a href=
+ "http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html">
+ http://www.ibm.com/servers/enable/site/porting/iseries/overview/gnu_utilities.html</a>).
+ Older versions may not work properly.</li>
+ </ul>
+
+ <p>The following describes how to setup and build ICU. For background
+ information, you should look at the <a href="#HowToBuildUNIX">UNIX build
+ instructions</a>.</p>
+
+ <ol>
+ <li>
+ Create target library. This library will be the target for the
+ resulting modules, programs and service programs. You will specify this
+ library on the OUTPUTDIR environment variable.
+<pre>
+<samp>CRTLIB LIB(<i>libraryname</i>)
+ADDENVVAR ENVVAR(OUTPUTDIR) VALUE('<i>libraryname</i>')</samp>
+</pre>
+ </li>
+
+ <li>
+ Set up the following environment variables and job characteristics in your build process
+<pre>
+<samp>ADDENVVAR ENVVAR(MAKE) VALUE('/usr/bin/gmake')
+CHGJOB CCSID(37)</samp>
+</pre>
+
+ <li>Run <tt>'QSH'</tt></li>
+
+ <li>Run gunzip on the ICU source code compressed tar archive
+ (icu-<i>X</i>.<i>Y</i>.tgz).</li>
+
+ <li>Run unpax-icu.sh on the tar file generated from the previous step.</li>
+
+ <li>Change your current directory to icu/source.</li>
+
+ <li>Run <tt>'./runConfigureICU IBMi'</tt> (See <a href="#HowToConfigureICU">configuration
+ note</a> for details).</li></li>
+
+ <li>Run <tt>'gmake'</tt> to build ICU.</li>
+
+ <li>Run <tt>'gmake check QIBM_MULTI_THREADED=Y'</tt> to build and run the tests.
+ You can look at the <a href=
+ "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/concept4.htm">
+ iSeries Information Center</a> for more details regarding the running of multiple threads
+ on IBM i.</li>
+ </ol>
+ <!-- end build environment -->
+
+ <h2><a name="HowToPackage" href="#HowToPackage" id="HowToPackage">How To
+ Package ICU</a></h2>
+
+ <p>There are many ways that a person can package ICU with their software
+ products. Usually only the libraries need to be considered for packaging.</p>
+
+ <p>On UNIX, you should use "<tt>gmake install</tt>" to make it easier to
+ develop and package ICU. The bin, lib and include directories are needed to
+ develop applications that use ICU. These directories will be created relative
+ to the "<tt>--prefix=</tt><i>dir</i>" configure option (See the <a href=
+ "#HowToBuildUNIX">UNIX build instructions</a>). When ICU is built on Windows,
+ a similar directory structure is built.</p>
+
+ <p>When changes have been made to the standard ICU distribution, it is
+ recommended that at least one of the following guidelines be followed for
+ special packaging.</p>
+
+ <ol>
+ <li>Add a suffix name to the library names. This can be done with the
+ --with-library-suffix configure option.</li>
+
+ <li>The installation script should install the ICU libraries into the
+ application's directory.</li>
+ </ol>
+
+ <p>Following these guidelines prevents other applications that use a standard
+ ICU distribution from conflicting with any libraries that you need. On
+ operating systems that do not have a standard C++ ABI (name mangling) for
+ compilers, it is recommended to do this special packaging anyway. More
+ details on customizing ICU are available in the <a href=
+ "http://www.icu-project.org/userguide/">User's Guide</a>. The <a href=
+ "#SourceCode">ICU Source Code Organization</a> section of this readme.html
+ gives a more complete description of the libraries.</p>
+
+ <table border="1" cellpadding="3" summary=
+ "ICU has several libraries for you to use.">
+ <caption>
+ Here is an example of libraries that are frequently packaged.
+ </caption>
+
+ <tr>
+ <th scope="col">Library Name</th>
+
+ <th scope="col">Windows Filename</th>
+
+ <th scope="col">Linux Filename</th>
+
+ <th scope="col">Comment</th>
+ </tr>
+
+ <tr>
+ <td>Data Library</td>
+
+ <td>icudt<i>XY</i>l.dll</td>
+
+ <td>libicudata.so.<i>XY</i>.<i>Z</i></td>
+
+ <td>Data required by the Common and I18n libraries. There are many ways
+ to package and <a href=
+ "http://www.icu-project.org/userguide/icudata.html">customize this
+ data</a>, but by default this is all you need.</td>
+ </tr>
+
+ <tr>
+ <td>Common Library</td>
+
+ <td>icuuc<i>XY</i>.dll</td>
+
+ <td>libicuuc.so.<i>XY</i>.<i>Z</i></td>
+
+ <td>Base library required by all other ICU libraries.</td>
+ </tr>
+
+ <tr>
+ <td>Internationalization (i18n) Library</td>
+
+ <td>icuin<i>XY</i>.dll</td>
+
+ <td>libicui18n.so.<i>XY</i>.<i>Z</i></td>
+
+ <td>A library that contains many locale based internationalization (i18n)
+ functions.</td>
+ </tr>
+
+ <tr>
+ <td>Layout Engine</td>
+
+ <td>icule<i>XY</i>.dll</td>
+
+ <td>libicule.so.<i>XY</i>.<i>Z</i></td>
+
+ <td>An optional engine for doing font layout.</td>
+ </tr>
+
+ <tr>
+ <td>Layout Extensions Engine</td>
+
+ <td>iculx<i>XY</i>.dll</td>
+
+ <td>libiculx.so.<i>XY</i>.<i>Z</i></td>
+
+ <td>An optional engine for doing font layout that uses parts of ICU.</td>
+ </tr>
+
+ <tr>
+ <td>ICU I/O (Unicode stdio) Library</td>
+
+ <td>icuio<i>XY</i>.dll</td>
+
+ <td>libicuio.so.<i>XY</i>.<i>Z</i></td>
+
+ <td>An optional library that provides a stdio like API with Unicode
+ support.</td>
+ </tr>
+
+ <tr>
+ <td>Tool Utility Library</td>
+
+ <td>icutu<i>XY</i>.dll</td>
+
+ <td>libicutu.so.<i>XY</i>.<i>Z</i></td>
+
+ <td>An internal library that contains internal APIs that are only used by
+ ICU's tools. If you do not use ICU's tools, you do not need this
+ library.</td>
+ </tr>
+ </table>
+
+ <p>Normally only the above ICU libraries need to be considered for packaging.
+ The versionless symbolic links to these libraries are only needed for easier
+ development. The <i>X</i>, <i>Y</i> and <i>Z</i> parts of the name are the
+ version numbers of ICU. For example, ICU 2.0.2 would have the name
+ libicuuc.so.20.2 for the common library. The exact format of the library
+ names can vary between platforms due to how each platform can handles library
+ versioning.</p>
+
+ <h2><a name="ImportantNotes" href="#ImportantNotes" id=
+ "ImportantNotes">Important Notes About Using ICU</a></h2>
+
+ <h3><a name="ImportantNotesMultithreaded" href="#ImportantNotesMultithreaded"
+ id="ImportantNotesMultithreaded">Using ICU in a Multithreaded
+ Environment</a></h3>
+
+ <p>Some versions of ICU require calling the <code>u_init()</code> function
+ from <code>uclean.h</code> to ensure that ICU is initialized properly. In
+ those ICU versions, <code>u_init()</code> must be called before ICU is used
+ from multiple threads. There is no harm in calling <code>u_init()</code> in a
+ single-threaded application, on a single-CPU machine, or in other cases where
+ <code>u_init()</code> is not required.</p>
+
+ <p>In addition to ensuring thread safety, <code>u_init()</code> also attempts
+ to load at least one ICU data file. Assuming that all data files are packaged
+ together (or are in the same folder in files mode), a failure code from
+ <code>u_init()</code> usually means that the data cannot be found. In this
+ case, the data may not be installed properly, or the application may have
+ failed to call <code>udata_setCommonData()</code> or
+ <code>u_setDataDirectory()</code> which specify to ICU where it can find its
+ data.</p>
+
+ <p>Since <code>u_init()</code> will load only one or two data files, it
+ cannot guarantee that all of the data that an application needs is available.
+ It cannot check for all data files because the set of files is customizable,
+ and some ICU services work without loading any data at all. An application
+ should always check for error codes when opening ICU service objects (using
+ <code>ucnv_open()</code>, <code>ucol_open()</code>, C++ constructors,
+ etc.).</p>
+
+ <h4>ICU 3.4 and later</h4>
+
+ <p>ICU 3.4 self-initializes properly for multi-threaded use. It achieves this
+ without performance penalty by hardcoding the core Unicode properties data,
+ at the cost of some flexibility. (For details see Jitterbug 4497.)</p>
+
+ <p><code>u_init()</code> can be used to check for data loading. It tries to
+ load the converter alias table (<code>cnvalias.icu</code>).</p>
+
+ <h4>ICU 2.6..3.2</h4>
+
+ <p>These ICU versions require a call to <code>u_init()</code> before
+ multi-threaded use. The services that are directly affected are those that
+ don't have a service object and need to be fast: normalization and character
+ properties.</p>
+
+ <p><code>u_init()</code> loads and initializes the data files for
+ normalization and character properties (<code>unorm.icu</code> and
+ <code>uprops.icu</code>) and can therefore also be used to check for data
+ loading.</p>
+
+ <h4>ICU 2.4 and earlier</h4>
+
+ <p>ICU 2.4 and earlier versions were not prepared for multithreaded use on
+ multi-CPU platforms where the CPUs implement weak memory coherency. These
+ CPUs include: Power4, Power5, Alpha, Itanium. <code>u_init()</code> was not
+ defined yet.</p>
+
+ <h4><a name="ImportantNotesHPUX" href="#ImportantNotesHPUX" id=
+ "ImportantNotesHPUX">Using ICU in a Multithreaded Environment on
+ HP-UX</a></h4>
+
+ <p>If you are building ICU with a newer aCC compiler and you are planning on
+ using the older <iostream.h> instead of the newer <iostream>, you
+ will need to use a special configure flag before building ICU. By default,
+ the aCC <a href="http://docs.hp.com/en/1405/options.htm#optioncap-AA">-AA</a>
+ flag is used on HP-UX when the compiler supports that option in order to make
+ ICU thread safe with RogueWave and other libraries using the 2.0 Standard C++
+ library. Your applications that use ICU will also need to use the <a href=
+ "http://docs.hp.com/en/1405/options.htm#optioncap-AA">-AA</a> compiler flag.
+ To turn off this behavior in ICU, you will need to use the --with-iostream=old
+ configure option when you first use runConfigureICU.</p>
+
+ <h4><a name="ImportantNotesSolaris" href="#ImportantNotesSolaris" id=
+ "ImportantNotesSolaris">Using ICU in a Multithreaded Environment on
+ Solaris</a></h4>
+
+ <h5>Linking on Solaris</h5>
+
+ <p>In order to avoid synchronization and threading issues, developers are
+ <strong>suggested</strong> to strictly follow the compiling and linking
+ guidelines for multithreaded applications, specified in the following
+ document from Sun Microsystems. Most notably, pay strict attention to the
+ following statements from Sun:</p>
+
+ <blockquote>
+ <p>To use libthread, specify -lthread before -lc on the ld command line, or
+ last on the cc command line.</p>
+
+ <p>To use libpthread, specify -lpthread before -lc on the ld command line,
+ or last on the cc command line.</p>
+ </blockquote>
+
+ <p>Failure to do this may cause spurious lock conflicts, recursive mutex
+ failure, and deadlock.</p>
+
+ <p>Source: "<i>Solaris Multithreaded Programming Guide, Compiling and
+ Debugging</i>", Sun Microsystems, Inc., Apr 2004<br />
+ <a href=
+ "http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view">http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view</a></p>
+
+ <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id=
+ "ImportantNotesWindows">Windows Platform</a></h3>
+
+ <p>If you are building on the Win32 platform, it is important that you
+ understand a few of the following build details.</p>
+
+ <h4>DLL directories and the PATH setting</h4>
+
+ <p>As delivered, the International Components for Unicode build as several
+ DLLs, which are placed in the "<i><ICU></i>\bin" directory. You must
+ add this directory to the PATH environment variable in your system, or any
+ executables you build will not be able to access International Components for
+ Unicode libraries. Alternatively, you can copy the DLL files into a directory
+ already in your PATH, but we do not recommend this. You can wind up with
+ multiple copies of the DLL and wind up using the wrong one.</p>
+
+ <h4><a name="ImportantNotesWindowsPath" id=
+ "ImportantNotesWindowsPath">Changing your PATH</a></h4>
+
+ <p><strong>Windows 2000/XP</strong>: Use the System Icon in the Control
+ Panel. Pick the "Advanced" tab. Select the "Environment Variables..."
+ button. Select the variable PATH in the lower box, and select the lower
+ "Edit..." button. In the "Variable Value" box, append the string
+ ";<i><ICU></i>\bin" to the end of the path string. If there is
+ nothing there, just type in "<i><ICU></i>\bin". Click the Set button,
+ then the OK button.</p>
+
+ <p>Note: When packaging a Windows application for distribution and
+ installation on user systems, copies of the ICU DLLs should be included with
+ the application, and installed for exclusive use by the application. This is
+ the only way to insure that your application is running with the same version
+ of ICU, built with exactly the same options, that you developed and tested
+ with. Refer to Microsoft's guidelines on the usage of DLLs, or search for the
+ phrase "DLL hell" on <a href=
+ "http://msdn.microsoft.com/">msdn.microsoft.com</a>.</p>
+
+ <h3><a name="ImportantNotesUNIX" href="#ImportantNotesUNIX" id=
+ "ImportantNotesUNIX">UNIX Type Platform</a></h3>
+
+ <p>If you are building on a UNIX platform, and if you are installing ICU in a
+ non-standard location, you may need to add the location of your ICU libraries
+ to your <strong>LD_LIBRARY_PATH</strong> or <strong>LIBPATH</strong>
+ environment variable (or the equivalent runtime library path environment
+ variable for your system). The ICU libraries may not link or load properly
+ without doing this.</p>
+
+ <p>Note that if you do not want to have to set this variable, you may instead
+ use the --enable-rpath option at configuration time. This option will
+ instruct the linker to always look for the libraries where they are
+ installed. You will need to use the appropriate linker options when linking
+ your own applications and libraries against ICU, too. Please refer to your
+ system's linker manual for information about runtime paths. The use of rpath
+ also means that when building a new version of ICU you should not have an
+ older version installed in the same place as the new version's installation
+ directory, as the older libraries will used during the build, instead of the
+ new ones, likely leading to an incorrectly build ICU. This is the proper
+ behavior of rpath.</p>
+
+ <h2><a name="PlatformDependencies" href="#PlatformDependencies" id=
+ "PlatformDependencies">Platform Dependencies</a></h2>
+
+ <h3><a name="PlatformDependenciesNew" href="#PlatformDependenciesNew" id=
+ "PlatformDependenciesNew">Porting To A New Platform</a></h3>
+
+ <p>If you are using ICU's Makefiles to build ICU on a new platform, there are
+ a few places where you will need to add or modify some files. If you need
+ more help, you can always ask the <a href=
+ "http://www.icu-project.org/contacts.html">icu-support mailing list</a>. Once
+ you have finished porting ICU to a new platform, it is recommended that you
+ contribute your changes back to ICU via the icu-support mailing list. This
+ will make it easier for everyone to benefit from your work.</p>
+
+ <h4>Data For a New Platform</h4>
+
+ <p>For some people, it may not be necessary for completely build ICU. Most of
+ the makefiles and build targets are for tools that are used for building
+ ICU's data, and an application's data (when an application uses ICU resource
+ bundles for its data).</p>
+
+ <p>Data files can be built on a different platform when both platforms share
+ the same endianness and the same charset family. This assertion does not
+ include platform dependent DLLs/shared/static libraries. For details see the
+ User Guide <a href="http://www.icu-project.org/userguide/icudata.html">ICU
+ Data</a> chapter.</p>
+
+ <p>ICU 3.6 removes the requirement that ICU be completely built in the native
+ operating environment. It adds the icupkg tool which can be run on any
+ platform to turn binary ICU data files from any one of the three formats into
+ any one of the other data formats. This allows a application to use ICU data
+ built anywhere to be used for any other target platform.</p>
+
+ <p><strong>WARNING!</strong> Building ICU without running the tests is not
+ recommended. The tests verify that ICU is safe to use. It is recommended that
+ you try to completely port and test ICU before using the libraries for your
+ own application.</p>
+
+ <h4>Adapting Makefiles For a New Platform</h4>
+
+ <p>Try to follow the build steps from the <a href="#HowToBuildUNIX">UNIX</a>
+ build instructions. If the configure script fails, then you will need to
+ modify some files. Here are the usual steps for porting to a new
+ platform:<br />
+ </p>
+
+ <ol>
+ <li>Create an mh file in icu/source/config/. You can use mh-linux or a
+ similar mh file as your base configuration.</li>
+
+ <li>Modify icu/source/aclocal.m4 to recognize your platform's mh file.</li>
+
+ <li>Modify icu/source/configure.in to properly set your <b>platform</b> C
+ Macro define.</li>
+
+ <li>Run <a href="http://www.gnu.org/software/autoconf/">autoconf</a> in
+ icu/source/ without any options. The autoconf tool is standard on most
+ Linux systems.</li>
+
+ <li>If you have any optimization options that you want to normally use, you
+ can modify icu/source/runConfigureICU to specify those options for your
+ platform.</li>
+
+ <li>Build and test ICU on your platform. It is very important that you run
+ the tests. If you don't run the tests, there is no guarentee that you have
+ properly ported ICU.</li>
+ </ol>
+
+ <h3><a name="PlatformDependenciesImpl" href="#PlatformDependenciesImpl" id=
+ "PlatformDependenciesImpl">Platform Dependent Implementations</a></h3>
+
+ <p>The platform dependencies have been mostly isolated into the following
+ files in the common library. This information can be useful if you are
+ porting ICU to a new platform.</p>
+
+ <ul>
+ <li>
+ <strong>unicode/platform.h.in</strong> (autoconf'ed platforms)<br />
+ <strong>unicode/p<i>XXXX</i>.h</strong> (others: pwin32.h, ppalmos.h,
+ ..): Platform-dependent typedefs and defines:<br />
+ <br />
+
+
+ <ul>
+ <li>Generic types like UBool, int8_t, int16_t, int32_t, int64_t,
+ uint64_t etc.</li>
+
+ <li>U_EXPORT and U_IMPORT for specifying dynamic library import and
+ export</li>
+
+ <li><iostream> usability</li>
+
+ <li>Thread safety usability</li>
+ </ul>
+ <br />
+ </li>
+
+ <li>
+ <strong>unicode/putil.h, putil.c</strong>: platform-dependent
+ implementations of various functions that are platform dependent:<br />
+ <br />
+
+
+ <ul>
+ <li>uprv_isNaN, uprv_isInfinite, uprv_getNaN and uprv_getInfinity for
+ handling special floating point values.</li>
+
+ <li>uprv_tzset, uprv_timezone, uprv_tzname and time for getting
+ platform specific time and time zone information.</li>
+
+ <li>u_getDataDirectory for getting the default data directory.</li>
+
+ <li>uprv_getDefaultLocaleID for getting the default locale
+ setting.</li>
+
+ <li>uprv_getDefaultCodepage for getting the default codepage
+ encoding.</li>
+ </ul>
+ <br />
+ </li>
+
+ <li>
+ <strong>umutex.h, umutex.c</strong>: Code for doing synchronization in
+ multithreaded applications. If you wish to use International Components
+ for Unicode in a multithreaded application, you must provide a
+ synchronization primitive that the classes can use to protect their
+ global data against simultaneous modifications. We already supply working
+ implementations for many platforms that ICU builds on.<br />
+ <br />
+ </li>
+
+ <li><strong>umapfile.h, umapfile.c</strong>: functions for mapping or
+ otherwise reading or loading files into memory. All access by ICU to data
+ from files makes use of these functions.<br />
+ <br />
+ </li>
+
+ <li>Using platform specific #ifdef macros are highly discouraged outside of
+ the scope of these files. When the source code gets updated in the future,
+ these #ifdef's can cause testing problems for your platform.</li>
+ </ul>
+ <hr />
+
+ <p>Copyright © 1997-2008 International Business Machines Corporation and
+ others. All Rights Reserved.<br />
+ IBM Globalization Center of Competency - San José<br />
+ 4400 North First Street<br />
+ San José, CA 95134<br />
+ USA</p>
+ </body>
+</html>
+
diff --git a/source/Doxyfile.in b/source/Doxyfile.in
new file mode 100644
index 0000000..600c9da
--- /dev/null
+++ b/source/Doxyfile.in
@@ -0,0 +1,230 @@
+# Doxyfile 1.3.7
+# ********************************************************************
+# * COPYRIGHT:
+# * Copyright (c) 2004-2009, International Business Machines Corporation
+# * and others. All Rights Reserved.
+# ********************************************************************
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME = "ICU @VERSION@"
+PROJECT_NUMBER =
+OUTPUT_DIRECTORY = doc
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+USE_WINDOWS_ENCODING = YES
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = NO
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP = NO
+INHERIT_DOCS = YES
+DISTRIBUTE_GROUP_DOC = YES
+TAB_SIZE = 8
+ALIASES = "memo=\par Note:\n" \
+ "draft=\xrefitem draft \"Draft\" \"Draft List\" This API may be changed in the future versions and was introduced in" \
+ "stable=\xrefitem stable \"Stable\" \"Stable List\"" \
+ "deprecated=\xrefitem deprecated \"Deprecated\" \"Deprecated List\"" \
+ "obsolete=\xrefitem obsolete \"Obsolete\" \"Obsolete List\"" \
+ "system=\xrefitem system \"System\" \"System List\" \n Do not use unless you know what you are doing." \
+ "internal=\xrefitem internal \"Internal\" \"Internal List\" Do not use. This API is for internal use only."
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+OPTIMIZE_OUTPUT_JAVA = NO
+SUBGROUPING = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = NO
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = NO
+EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = YES
+CASE_SENSE_NAMES = YES
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = NO
+SORT_BY_SCOPE_NAME = NO
+GENERATE_TODOLIST = YES
+GENERATE_TESTLIST = YES
+GENERATE_BUGLIST = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+
+# docset
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "ICU @VERSION@"
+DOCSET_BUNDLE_ID = org.icu-project.icu4c
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = NO
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_FORMAT = "$file:$line: $text"
+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/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 @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 =
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = YES
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION = YES
+VERBATIM_HEADERS = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = YES
+COLS_IN_ALPHA_INDEX = 5
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = YES
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_ALIGN_MEMBERS = YES
+GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+BINARY_TOC = NO
+TOC_EXPAND = NO
+DISABLE_INDEX = NO
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = NO
+TREEVIEW_WIDTH = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4wide
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = NO
+USE_PDFLATEX = NO
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = NO
+RTF_OUTPUT = rtf
+COMPACT_RTF = NO
+RTF_HYPERLINKS = NO
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = YES
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = YES
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END= U_NO_THROW= U_NAMESPACE_BEGIN= U_NAMESPACE_END=
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE = "@builddir@/doc/html/icudocs.tag"
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = NO
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+UML_LOOK = NO
+TEMPLATE_RELATIONS = NO
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DOT_IMAGE_FORMAT = png
+DOT_PATH =
+DOTFILE_DIRS =
+MAX_DOT_GRAPH_WIDTH = 1024
+MAX_DOT_GRAPH_HEIGHT = 1024
+MAX_DOT_GRAPH_DEPTH = 0
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = YES
diff --git a/source/Makefile.in b/source/Makefile.in
new file mode 100644
index 0000000..37e468e
--- /dev/null
+++ b/source/Makefile.in
@@ -0,0 +1,230 @@
+#******************************************************************************
+#
+# Copyright (C) 1998-2008, International Business Machines
+# Corporation and others. All Rights Reserved.
+#
+#******************************************************************************
+## Top-level Makefile.in for ICU
+## Stephen F. Booth
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+
+top_builddir = .
+
+include $(top_builddir)/icudefs.mk
+
+docdir = $(datadir)/doc
+docsubdir = $(PACKAGE)$(ICULIBDASHSUFFIX)/html
+
+##
+
+## Build directory information
+subdir = .
+
+#AUTOCONF = @AUTOCONF@
+
+## Optional directory setup
+@LAYOUT_TRUE@LAYOUT = layout layoutex
+@ICUIO_TRUE@ICUIO = io
+@EXTRAS_TRUE@EXTRA = extra
+@TESTS_TRUE@TEST = test
+@SAMPLES_TRUE@SAMPLE = samples
+
+DOXYGEN = @DOXYGEN@
+DOCZIP = icu-docs.zip
+
+## Files to remove for 'make clean'
+CLEANFILES = *~
+
+## Files built (autoconfed) and installed
+INSTALLED_BUILT_FILES = $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc $(top_builddir)/config/icu-config @platform_make_fragment@ $(EXTRA_DATA:%=$(DESTDIR)$(pkglibdir)/%)
+
+## Files built (autoconfed) but not installed
+LOCAL_BUILT_FILES = icudefs.mk
+
+DOCDIRS = common i18n
+SUBDIRS = stubdata common i18n $(LAYOUT) tools data $(ICUIO) $(EXTRA) $(SAMPLE) $(TEST)
+
+SECTION = 1
+
+MANX_FILES = config/icu-config.$(SECTION)
+
+ALL_MAN_FILES = $(MANX_FILES)
+
+## Extra files to install [nothing at present]
+EXTRA_DATA =
+
+## 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 \
+distclean-local distclean-recursive doc dist dist-local dist-recursive \
+check check-local check-recursive clean-recursive-with-twist install-icu \
+doc install-doc tests
+
+## Clear suffix list
+.SUFFIXES :
+
+## List of standard targets
+all: all-local all-recursive
+install: install-recursive install-local
+clean: clean-recursive-with-twist clean-local
+distclean : distclean-recursive distclean-local
+dist: dist-recursive dist-local
+check: all check-recursive
+check-recursive: all
+
+ifeq ($(DOXYGEN),)
+doc:
+ @echo you need Doxygen to generate documentation. Doxygen can be found on the Web
+ @echo at http://www.doxygen.org/
+else
+doc: doc/html/index.html
+
+doc/html/index.html: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/layout/unicode/*.h $(srcdir)/io/unicode/*.h)
+ $(DOXYGEN)
+
+Doxyfile: $(srcdir)/Doxyfile.in
+ CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(DOCZIP): doc
+ -$(RMV) $(DOCZIP)
+ ( cd doc/html ; zip -r ../../$(DOCZIP) * )
+endif
+
+LOCAL_SUBDIRS = $(SUBDIRS)
+CLEAN_FIRST_SUBDIRS = tools
+
+$(LIBDIR) $(BINDIR):
+ -$(MKINSTALLDIRS) $@
+
+## Recursive targets
+all-recursive install-recursive clean-recursive distclean-recursive dist-recursive check-recursive: $(LIBDIR) $(BINDIR)
+ @dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(LOCAL_SUBDIRS)'; for subdir in $$list; do \
+ echo "$(MAKE)[$(MAKELEVEL)]: Making \`$$target' in \`$$subdir'"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-local"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) RECURSIVE=YES $$local_target) || exit; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) "$$target-local" || exit; \
+ fi
+
+clean-recursive-with-twist:
+ $(MAKE) clean-recursive LOCAL_SUBDIRS='$(CLEAN_FIRST_SUBDIRS) $(filter-out $(CLEAN_FIRST_SUBDIRS),$(LOCAL_SUBDIRS))'
+
+all-local: $(srcdir)/configure $(LOCAL_BUILT_FILES) $(INSTALLED_BUILT_FILES)
+
+install-local: install-icu install-manx
+
+install-icu: $(INSTALLED_BUILT_FILES)
+ @$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/config
+ @$(MKINSTALLDIRS) $(DESTDIR)$(pkglibdir)
+ @$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
+ @$(MKINSTALLDIRS) $(DESTDIR)$(sbindir)
+ $(INSTALL_DATA) @platform_make_fragment@ $(DESTDIR)$(pkgdatadir)/config/@platform_make_fragment_name@
+ $(INSTALL_SCRIPT) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(pkgdatadir)/mkinstalldirs
+ $(INSTALL_SCRIPT) $(top_srcdir)/install-sh $(DESTDIR)$(pkgdatadir)/install-sh
+ $(INSTALL_DATA) $(top_srcdir)/../license.html $(DESTDIR)$(pkgdatadir)/license.html
+ $(INSTALL_SCRIPT) $(top_builddir)/config/icu-config $(DESTDIR)$(bindir)/icu-config
+ $(INSTALL_DATA) $(top_builddir)/config/Makefile.inc $(DESTDIR)$(pkglibdir)/Makefile.inc
+ $(INSTALL_DATA) $(top_builddir)/config/pkgdata.inc $(DESTDIR)$(pkglibdir)/pkgdata.inc
+ cd $(DESTDIR)$(pkglibdir)/..; \
+ $(RM) current && ln -s $(VERSION) current; \
+ $(RM) Makefile.inc && ln -s current/Makefile.inc Makefile.inc; \
+ $(RM) pkgdata.inc && ln -s current/pkgdata.inc pkgdata.inc
+
+ifeq ($(DOXYGEN),)
+install-doc:
+else
+install-doc: doc
+ $(RM) -r $(DESTDIR)$(docdir)/$(docsubdir)
+ $(MKINSTALLDIRS) $(DESTDIR)$(docdir)/$(docsubdir)
+ $(INSTALL_DATA) doc/html/* $(DESTDIR)$(docdir)/$(docsubdir)
+endif
+
+$(DESTDIR)$(pkglibdir)/%: $(top_srcdir)/../data/%
+ $(INSTALL_DATA) $< $@
+
+# Build the tests, but don't run them.
+tests: all
+ $(MAKE) -C $(top_builddir)/test
+
+dist-local:
+
+clean-local:
+ test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
+ $(RMV) Doxyfile doc $(DOCZIP)
+
+distclean-local: clean-local
+ $(RMV) $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc $(top_builddir)/config/icu-config
+ $(RMV) config.cache config.log config.status
+ $(RMV) Makefile config/Makefile icudefs.mk $(LIBDIR) $(BINDIR)
+
+check-local: $(top_builddir)/config/icu-config $(top_builddir)/config/Makefile.inc $(top_builddir)/config/pkgdata.inc
+ @echo verifying that icu-config --selfcheck can operate
+ @test "passed" = "$(shell $(top_builddir)/config/icu-config --selfcheck 2>&1)" || (echo "FAIL: icu-config could not run properly." ; exit 1)
+ @echo verifying that $(MAKE) -f Makefile.inc selfcheck can operate
+ @test "passed" = "$(shell $(MAKE) --no-print-directory -f $(top_builddir)/config/Makefile.inc SELFCHECK=1 selfcheck)" || (echo "FAIL: Makefile.inc could not run properly." ; exit 1 )
+ @echo "PASS: config selfcheck OK"
+
+#$(srcdir)/configure : $(srcdir)/configure.in $(top_srcdir)/aclocal.m4
+# cd $(srcdir) && $(AUTOCONF)
+
+icudefs.mk: $(srcdir)/icudefs.mk.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+Makefile: $(srcdir)/Makefile.in icudefs.mk $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(top_builddir)/config/Makefile.inc: $(srcdir)/config/Makefile.inc.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(top_builddir)/config/pkgdata.inc: icudefs.mk $(top_builddir)/config/pkgdataMakefile
+ cd $(top_builddir)/config; \
+ $(MAKE) -f pkgdataMakefile
+
+$(top_builddir)/config/pkgdataMakefile:
+ cd $(top_builddir) \
+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(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
+ @echo
+ @echo "*** config.status has become stale ***"
+ @echo " 'configure' and/or 'uversion.h' have changed, please"
+ @echo " do 'runConfigureICU' (or 'configure') again, as per"
+ @echo " the readme.html."
+ @echo
+ @echo
+ exit 1
+
+
+install-manx: $(MANX_FILES)
+ $(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION)
+ $(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION)
+
+config/%.$(SECTION): $(srcdir)/config/%.$(SECTION).in
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
diff --git a/source/aclocal.m4 b/source/aclocal.m4
new file mode 100644
index 0000000..f4c45ff
--- /dev/null
+++ b/source/aclocal.m4
@@ -0,0 +1,441 @@
+# aclocal.m4 for ICU
+# Copyright (c) 1999-2008, International Business Machines Corporation and
+# others. All Rights Reserved.
+# Stephen F. Booth
+
+# @TOP@
+
+# ICU_CHECK_MH_FRAG
+AC_DEFUN(ICU_CHECK_MH_FRAG, [
+ AC_CACHE_CHECK(
+ [which Makefile fragment to use],
+ [icu_cv_host_frag],
+ [
+case "${host}" in
+*-*-solaris*)
+ 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
+ icu_cv_host_frag=mh-alpha-linux-cc
+ fi ;;
+powerpc*-*-linux*)
+ if test "$GCC" = yes; then
+ icu_cv_host_frag=mh-linux
+ else
+ icu_cv_host_frag=mh-linux-va
+ fi ;;
+*-*-linux*|*-pc-gnu) icu_cv_host_frag=mh-linux ;;
+*-*-cygwin|*-*-mingw32)
+ if test "$GCC" = yes; then
+ AC_TRY_COMPILE([
+#ifndef __MINGW32__
+#error This is not MinGW
+#endif], [], icu_cv_host_frag=mh-mingw, icu_cv_host_frag=mh-cygwin)
+ else
+ icu_cv_host_frag=mh-cygwin-msvc
+ fi ;;
+*-*-*bsd*|*-*-dragonfly*) icu_cv_host_frag=mh-bsd-gcc ;;
+*-*-aix*)
+ if test "$GCC" = yes; then
+ icu_cv_host_frag=mh-aix-gcc
+ else
+ icu_cv_host_frag=mh-aix-va
+ fi ;;
+*-*-hpux*)
+ if test "$GCC" = yes; then
+ icu_cv_host_frag=mh-hpux-gcc
+ else
+ case "$CXX" in
+ *aCC) icu_cv_host_frag=mh-hpux-acc ;;
+ esac
+ fi ;;
+*-*ibm-openedition*|*-*-os390*) icu_cv_host_frag=mh-os390 ;;
+*-*-os400*) icu_cv_host_frag=mh-os400 ;;
+*-apple-rhapsody*) icu_cv_host_frag=mh-darwin ;;
+*-apple-darwin*) icu_cv_host_frag=mh-darwin ;;
+*-*-beos|*-*-haiku) icu_cv_host_frag=mh-beos ;;
+*-*-irix*) icu_cv_host_frag=mh-irix ;;
+*-dec-osf*) icu_cv_host_frag=mh-alpha-osf ;;
+*-*-nto*) icu_cv_host_frag=mh-qnx ;;
+*-ncr-*) icu_cv_host_frag=mh-mpras ;;
+*) icu_cv_host_frag=mh-unknown ;;
+esac
+ ]
+ )
+])
+
+# ICU_CONDITIONAL - similar example taken from Automake 1.4
+AC_DEFUN(ICU_CONDITIONAL,
+[AC_SUBST($1_TRUE)
+if $2; then
+ $1_TRUE=
+else
+ $1_TRUE='#'
+fi])
+
+# 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])
+
+# AC_SEARCH_LIBS_FIRST(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
+# [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
+# Search for a library defining FUNC, then see if it's not already available.
+
+AC_DEFUN(AC_SEARCH_LIBS_FIRST,
+[AC_PREREQ([2.13])
+AC_CACHE_CHECK([for library containing $1], [ac_cv_search_$1],
+[ac_func_search_save_LIBS="$LIBS"
+ac_cv_search_$1="no"
+for i in $2; do
+LIBS="-l$i $5 $ac_func_search_save_LIBS"
+AC_TRY_LINK_FUNC([$1],
+[ac_cv_search_$1="-l$i"
+break])
+done
+if test "$ac_cv_search_$1" = "no"; then
+AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"])
+fi
+LIBS="$ac_func_search_save_LIBS"])
+if test "$ac_cv_search_$1" != "no"; then
+ test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS"
+ $3
+else :
+ $4
+fi])
+
+
+
+# Check if we can build and use 64-bit libraries
+AC_DEFUN(AC_CHECK_64BIT_LIBS,
+[
+ BITS_REQ=nochange
+ ENABLE_64BIT_LIBS=unknown
+ ## revisit this for cross-compile.
+
+ AC_ARG_ENABLE(64bit-libs,
+ [ --enable-64bit-libs (deprecated, use --with-library-bits) build 64-bit libraries [default= platform default]],
+ [echo "note, use --with-library-bits instead of --*-64bit-libs"
+ case "${withval}" in
+ no|false|32) BITS_REQ=32 ;;
+ yes|true|64) BITS_REQ=64 ;;
+ nochange) BITS_REQ=nochange ;;
+ *) AC_MSG_ERROR(bad value ${withval} for --with-library-bits) ;;
+ esac] )
+
+
+ AC_ARG_WITH(library-bits,
+ [ --with-library-bits=bits specify how many bits to use for the library (32, 64, 64else32, nochange) [default=nochange]],
+ [case "${withval}" in
+ nochange) BITS_REQ=$withval ;;
+ 32|64|64else32) BITS_REQ=$withval ;;
+ *) AC_MSG_ERROR(bad value ${withval} for --with-library-bits) ;;
+ esac])
+ DEFAULT_64BIT=no
+ AC_MSG_CHECKING([whether 64 bit binaries are built by default])
+ AC_RUN_IFELSE(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ DEFAULT_64BIT=yes, DEFAULT_64BIT=no, DEFAULT_64BIT=unknown)
+ BITS_GOT=unknown
+ BITS_OK=yes
+ if test "$DEFAULT_64BIT" = "yes"; then
+ BITS_GOT=64
+ case "$BITS_REQ" in
+ 32) BITS_OK=no;;
+ nochange) ;;
+ *) ;;
+ esac
+ elif test "$DEFAULT_64BIT" = "no"; then
+ BITS_GOT=32
+ case "$BITS_REQ" in
+ 64|64else32) BITS_OK=no;;
+ nochange) ;;
+ *) ;;
+ esac
+ elif test "$DEFAULT_64BIT" = "unknown"; then
+ BITS_GOT=unknown
+ case "$BITS_REQ" in
+ 64|64else32) BITS_OK=no;;
+ 32) BITS_OK=no;;
+ nochange) ;;
+ *) ;;
+ esac
+ fi
+
+ AC_MSG_RESULT($DEFAULT_64BIT);
+ #AC_MSG_RESULT($DEFAULT_64BIT - got $BITS_GOT wanted $BITS_REQ okness $BITS_OK);
+ if test "$BITS_OK" != "yes"; then
+ # These results can't be cached because is sets compiler flags.
+ if test "$BITS_REQ" = "64" -o "$BITS_REQ" = "64else32"; then
+ AC_MSG_CHECKING([how to build 64-bit executables])
+ if test "$GCC" = yes; then
+ #DONOTUSE# This test is wrong. If it's GCC, just test m64
+ #DONOTUSE#if test -n "`$CXX -dumpspecs 2>&1 && $CC -dumpspecs 2>&1 | grep -v __LP64__`"; then
+ OLD_CFLAGS="${CFLAGS}"
+ OLD_CXXFLAGS="${CXXFLAGS}"
+ CFLAGS="${CFLAGS} -m64"
+ CXXFLAGS="${CXXFLAGS} -m64"
+ AC_COMPILE_IFELSE(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no)
+ if test "$ENABLE_64BIT_LIBS" != yes; then
+ # Nope. back out changes.
+ CFLAGS="${OLD_CFLAGS}"
+ CXXFLAGS="${OLD_CXXFLAGS}"
+ fi
+ else
+ case "${host}" in
+ sparc*-*-solaris*)
+ # 0. save old flags
+ OLD_CFLAGS="${CFLAGS}"
+ OLD_CXXFLAGS="${CXXFLAGS}"
+ # 1. try -m64
+ CFLAGS="${CFLAGS} -m64"
+ CXXFLAGS="${CXXFLAGS} -m64"
+ AC_COMPILE_IFELSE(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no)
+ if test "$ENABLE_64BIT_LIBS" != yes; then
+ # Nope. back out changes.
+ CFLAGS="${OLD_CFLAGS}"
+ CXXFLAGS="${OLD_CXXFLAGS}"
+ # 2. try xarch=v9 [deprecated]
+ ## TODO: cross compile: the following won't work.
+ SPARCV9=`isainfo -n 2>&1 | grep sparcv9`
+ SOL64=`$CXX -xarch=v9 2>&1 && $CC -xarch=v9 2>&1 | grep -v usage:`
+ # "Warning: -xarch=v9 is deprecated, use -m64 to create 64-bit programs"
+ if test -z "$SOL64" && test -n "$SPARCV9"; then
+ CFLAGS="${CFLAGS} -xtarget=ultra -xarch=v9"
+ CXXFLAGS="${CXXFLAGS} -xtarget=ultra -xarch=v9"
+ LDFLAGS="${LDFLAGS} -xtarget=ultra -xarch=v9"
+ ENABLE_64BIT_LIBS=yes
+ else
+ ENABLE_64BIT_LIBS=no
+ fi
+ fi
+ ;;
+ i386-*-solaris*)
+ # 0. save old flags
+ OLD_CFLAGS="${CFLAGS}"
+ OLD_CXXFLAGS="${CXXFLAGS}"
+ # 1. try -m64
+ CFLAGS="${CFLAGS} -m64"
+ CXXFLAGS="${CXXFLAGS} -m64"
+ AC_COMPILE_IFELSE(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no)
+ if test "$ENABLE_64BIT_LIBS" != yes; then
+ # Nope. back out changes.
+ CFLAGS="${OLD_CFLAGS}"
+ CXXFLAGS="${OLD_CXXFLAGS}"
+ # 2. try the older compiler option
+ ## TODO: cross compile problem
+ SOL64=`$CXX -xtarget=generic64 2>&1 && $CC -xtarget=generic64 2>&1 | grep -v usage:`
+ if test -z "$SOL64" && test -n "$AMD64"; then
+ CFLAGS="${CFLAGS} -xtarget=generic64"
+ CXXFLAGS="${CXXFLAGS} -xtarget=generic64"
+ ENABLE_64BIT_LIBS=yes
+ else
+ ENABLE_64BIT_LIBS=no
+ fi
+ fi
+ ;;
+ ia64-*-linux*)
+ # check for ecc/ecpc compiler support
+ ## TODO: cross compiler problem
+ if test -n "`$CXX --help 2>&1 && $CC --help 2>&1 | grep -v Intel`"; then
+ if test -n "`$CXX --help 2>&1 && $CC --help 2>&1 | grep -v Itanium`"; then
+ ENABLE_64BIT_LIBS=yes
+ else
+ ENABLE_64BIT_LIBS=no
+ fi
+ else
+ # unknown
+ ENABLE_64BIT_LIBS=no
+ fi
+ ;;
+ *-*-cygwin)
+ # vcvarsamd64.bat should have been used to enable 64-bit builds.
+ # We only do this check to display the correct answer.
+ ## TODO: cross compiler problem
+ if test -n "`$CXX -help 2>&1 | grep 'for x64'`"; then
+ ENABLE_64BIT_LIBS=yes
+ else
+ # unknown
+ ENABLE_64BIT_LIBS=no
+ fi
+ ;;
+ *-*-aix*|powerpc64-*-linux*)
+ OLD_CFLAGS="${CFLAGS}"
+ OLD_CXXFLAGS="${CXXFLAGS}"
+ OLD_LDFLAGS="${LDFLAGS}"
+ CFLAGS="${CFLAGS} -q64"
+ CXXFLAGS="${CXXFLAGS} -q64"
+ LDFLAGS="${LDFLAGS} -q64"
+ AC_COMPILE_IFELSE(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no)
+ if test "$ENABLE_64BIT_LIBS" != yes; then
+ CFLAGS="${OLD_CFLAGS}"
+ CXXFLAGS="${OLD_CXXFLAGS}"
+ LDFLAGS="${OLD_LDFLAGS}"
+ else
+ case "${host}" in
+ *-*-aix*)
+ ARFLAGS="${ARFLAGS} -X64"
+ esac
+ fi
+ ;;
+ *-*-hpux*)
+ # First we try the newer +DD64, if that doesn't work,
+ # try other options.
+
+ OLD_CFLAGS="${CFLAGS}"
+ OLD_CXXFLAGS="${CXXFLAGS}"
+ CFLAGS="${CFLAGS} +DD64"
+ CXXFLAGS="${CXXFLAGS} +DD64"
+ AC_COMPILE_IFELSE(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no)
+ if test "$ENABLE_64BIT_LIBS" != yes; then
+ CFLAGS="${OLD_CFLAGS}"
+ CXXFLAGS="${OLD_CXXFLAGS}"
+ CFLAGS="${CFLAGS} +DA2.0W"
+ CXXFLAGS="${CXXFLAGS} +DA2.0W"
+ AC_COMPILE_IFELSE(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no)
+ if test "$ENABLE_64BIT_LIBS" != yes; 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"
+ AC_COMPILE_IFELSE(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ ENABLE_64BIT_LIBS=yes, ENABLE_64BIT_LIBS=no)
+ if test "$ENABLE_64BIT_LIBS" != yes; then
+ CFLAGS="${OLD_CFLAGS}"
+ CXXFLAGS="${OLD_CXXFLAGS}"
+ LDFLAGS="${OLD_LDFLAGS}"
+ fi
+ ;;
+ *)
+ ENABLE_64BIT_LIBS=no
+ ;;
+ esac
+ fi
+ AC_MSG_RESULT($ENABLE_64BIT_LIBS)
+ elif test "$BITS_REQ" = "32"; then
+ AC_MSG_CHECKING([how to build 32-bit executables])
+ if test "$GCC" = yes; then
+ OLD_CFLAGS="${CFLAGS}"
+ OLD_CXXFLAGS="${CXXFLAGS}"
+ CFLAGS="${CFLAGS} -m32"
+ CXXFLAGS="${CXXFLAGS} -m32"
+ AC_COMPILE_IFELSE(int main(void) {return (sizeof(void*)*8==32)?0:1;},
+ ENABLE_64BIT_LIBS=no, ENABLE_64BIT_LIBS=yes)
+ if test "$ENABLE_64BIT_LIBS" != no; then
+ CFLAGS="${OLD_CFLAGS}"
+ CXXFLAGS="${OLD_CXXFLAGS}"
+ fi
+ else
+ echo " Note: not sure how to build 32 bit executables on this platform."
+ fi
+ # 'How to build 32 bit...' will be opposite of 64 bit
+ if test "$ENABLE_64BIT_LIBS" = yes; then
+ AC_MSG_RESULT(no)
+ else
+ if test "$ENABLE_64BIT_LIBS" = no; then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(unknown)
+ fi
+ fi
+ fi
+ # Individual tests that fail should reset their own flags.
+ NOW_64BIT=no
+ NOW_32BIT=no
+ AC_MSG_CHECKING([whether runnable 64-bit binaries are being built ])
+ AC_TRY_RUN(int main(void) {return (sizeof(void*)*8==64)?0:1;},
+ NOW_64BIT=yes, NOW_64BIT=no, NOW_64BIT=unknown)
+ AC_MSG_RESULT($NOW_64BIT);
+ AC_MSG_CHECKING([whether runnable 32-bit binaries are being built ])
+ AC_TRY_RUN(int main(void) {return (sizeof(void*)*8==32)?0:1;},
+ NOW_32BIT=yes, NOW_32BIT=no, NOW_32BIT=unknown)
+ AC_MSG_RESULT($NOW_32BIT);
+
+ if test "$BITS_REQ" = "32" -a "$NOW_64BIT" = "yes"; then
+ AC_MSG_ERROR([Requested $BITS_REQ but got 64 bit binaries])
+ elif test "$BITS_REQ" = "64" -a "$NOW_32BIT" = "yes"; then
+ AC_MSG_ERROR([Requested $BITS_REQ but got 32 bit binaries])
+ elif test "$NOW_32BIT" != "yes" -a "$NOW_64BIT" != "yes"; then
+ echo "*** Note: Cannot determine bitness - if configure fails later, try --with-library-bits=nochange"
+ fi
+ fi
+])
+
+# Strict compilation options.
+AC_DEFUN(AC_CHECK_STRICT_COMPILE,
+[
+ AC_MSG_CHECKING([whether strict compiling is on])
+ AC_ARG_ENABLE(strict,[ --enable-strict compile with strict compiler options [default=yes]], [
+ if test "$enableval" = no
+ then
+ ac_use_strict_options=no
+ else
+ ac_use_strict_options=yes
+ fi
+ ], [ac_use_strict_options=yes])
+ AC_MSG_RESULT($ac_use_strict_options)
+
+ 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 -Wno-long-long"
+ case "${host}" in
+ *-*-solaris*)
+ CFLAGS="$CFLAGS -D__STDC__=0";;
+ esac
+ else
+ case "${host}" in
+ *-*-cygwin)
+ if test "`$CC /help 2>&1 | head -c9`" = "Microsoft"
+ then
+ CFLAGS="$CFLAGS /W4"
+ fi
+ esac
+ fi
+ if test "$GXX" = yes
+ then
+ CXXFLAGS="$CXXFLAGS -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long"
+ case "${host}" in
+ *-*-solaris*)
+ CXXFLAGS="$CXXFLAGS -D__STDC__=0";;
+ esac
+ else
+ case "${host}" in
+ *-*-cygwin)
+ if test "`$CXX /help 2>&1 | head -c9`" = "Microsoft"
+ then
+ CXXFLAGS="$CXXFLAGS /W4"
+ fi
+ esac
+ fi
+ fi
+])
+
+
diff --git a/source/allinone/allinone.sln b/source/allinone/allinone.sln
new file mode 100644
index 0000000..99344ad
--- /dev/null
+++ b/source/allinone/allinone.sln
@@ -0,0 +1,561 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cal", "..\samples\cal\cal.vcproj", "{F7659D77-09CF-4FE9-ACEE-927287AA9509}"
+ 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
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cintltst", "..\test\cintltst\cintltst.vcproj", "{3D1246AE-1B32-479B-BECA-AEFA97BE2321}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776}
+ {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}") = "common", "..\common\common.vcproj", "{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {203EC78A-0531-43F0-A636-285439BDE025} = {203EC78A-0531-43F0-A636-285439BDE025}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ctestfw", "..\tools\ctestfw\ctestfw.vcproj", "{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}"
+ 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}") = "date", "..\samples\date\date.vcproj", "{38B5751A-C6F9-4409-950C-F4F9DA17275F}"
+ 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
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "derb", "..\tools\genrb\derb.vcproj", "{D3065ADB-8820-4CC7-9B6C-9510833961A3}"
+ 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}") = "genbrk", "..\tools\genbrk\genbrk.vcproj", "{C2BE5000-7501-4E87-9724-B8D82494FAE6}"
+ 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}") = "genccode", "..\tools\genccode\genccode.vcproj", "{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}"
+ 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}") = "gencmn", "..\tools\gencmn\gencmn.vcproj", "{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}"
+ 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}") = "gencnval", "..\tools\gencnval\gencnval.vcproj", "{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}"
+ 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}") = "gennames", "..\tools\gennames\gennames.vcproj", "{F5281B04-A9E0-4680-BBA8-1D7F7D115458}"
+ 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}") = "gennorm", "..\tools\gennorm\gennorm.vcproj", "{F5213103-6CBE-46E6-B4CC-2570B6837D86}"
+ 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}") = "genpname", "..\tools\genpname\genpname.vcproj", "{DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}"
+ 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}") = "genprops", "..\tools\genprops\genprops.vcproj", "{6F744648-D15F-478A-90C6-58E353B5DDB3}"
+ 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}") = "genrb", "..\tools\genrb\genrb.vcproj", "{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776}
+ {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}") = "gentest", "..\tools\gentest\gentest.vcproj", "{77C78066-746F-4EA6-B3FE-B8C8A4A97891}"
+ ProjectSection(ProjectDependencies) = postProject
+ {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}") = "genuca", "..\tools\genuca\genuca.vcproj", "{86829694-A375-4C58-B4EA-96EF514E3225}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776}
+ {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}") = "i18n", "..\i18n\i18n.vcproj", "{0178B127-6269-407D-B112-93877BB62776}"
+ ProjectSection(ProjectDependencies) = postProject
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intltest", "..\test\intltest\intltest.vcproj", "{73632960-B3A6-464D-83A3-4B43365F19B8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776}
+ {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}") = "layout", "..\layout\layout.vcproj", "{C920062A-0647-4553-A3B2-37C58065664B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "layoutex", "..\layoutex\layoutex.vcproj", "{37FC2C7F-1904-4811-8955-2F478830EAD1}"
+ ProjectSection(ProjectDependencies) = postProject
+ {C920062A-0647-4553-A3B2-37C58065664B} = {C920062A-0647-4553-A3B2-37C58065664B}
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makeconv", "..\tools\makeconv\makeconv.vcproj", "{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}"
+ 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}") = "makedata", "..\data\makedata.vcproj", "{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6} = {C2BE5000-7501-4E87-9724-B8D82494FAE6}
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86} = {F5213103-6CBE-46E6-B4CC-2570B6837D86}
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458} = {F5281B04-A9E0-4680-BBA8-1D7F7D115458}
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A} = {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C} = {C2B04507-2521-4801-BF0D-5FD79D6D518C}
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB} = {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}
+ {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776}
+ {C920062A-0647-4553-A3B2-37C58065664B} = {C920062A-0647-4553-A3B2-37C58065664B}
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF} = {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}
+ {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0}
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47} = {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}
+ {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}
+ {73632960-B3A6-464D-83A3-4B43365F19B8} = {73632960-B3A6-464D-83A3-4B43365F19B8}
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891} = {77C78066-746F-4EA6-B3FE-B8C8A4A97891}
+ {37FC2C7F-1904-4811-8955-2F478830EAD1} = {37FC2C7F-1904-4811-8955-2F478830EAD1}
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F} = {E4993E82-D68A-46CA-BAE0-9D35E172E46F}
+ {67351485-4D18-4245-BE39-A7EF0675ACD2} = {67351485-4D18-4245-BE39-A7EF0675ACD2}
+ {203EC78A-0531-43F0-A636-285439BDE025} = {203EC78A-0531-43F0-A636-285439BDE025}
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C} = {DBA4088D-F6F9-4F8F-8820-082A4765C16C}
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F} = {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}
+ {86829694-A375-4C58-B4EA-96EF514E3225} = {86829694-A375-4C58-B4EA-96EF514E3225}
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321} = {3D1246AE-1B32-479B-BECA-AEFA97BE2321}
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA} = {631C23CE-6C1D-4875-88F0-85E0A42B36EA}
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3} = {D3065ADB-8820-4CC7-9B6C-9510833961A3}
+ {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
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pkgdata", "..\tools\pkgdata\pkgdata.vcproj", "{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0}
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC} = {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F} = {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547} = {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stubdata", "..\stubdata\stubdata.vcproj", "{203EC78A-0531-43F0-A636-285439BDE025}"
+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
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uconv", "..\extra\uconv\uconv.vcproj", "{DBA4088D-F6F9-4F8F-8820-082A4765C16C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A} = {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}
+ {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776}
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC} = {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "io", "..\io\io.vcproj", "{C2B04507-2521-4801-BF0D-5FD79D6D518C}"
+ 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
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gensprep", "..\tools\gensprep\gensprep.vcproj", "{631C23CE-6C1D-4875-88F0-85E0A42B36EA}"
+ 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}"
+ 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}") = "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
+ {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}
+ {37FC2C7F-1904-4811-8955-2F478830EAD1} = {37FC2C7F-1904-4811-8955-2F478830EAD1}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencfu", "..\tools\gencfu\gencfu.vcproj", "{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0178B127-6269-407D-B112-93877BB62776} = {0178B127-6269-407D-B112-93877BB62776}
+ {6B231032-3CB5-4EED-9210-810D666A23A0} = {6B231032-3CB5-4EED-9210-810D666A23A0}
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D} = {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.Build.0 = Debug|Win32
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.ActiveCfg = Debug|x64
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.Build.0 = Debug|x64
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.ActiveCfg = Release|Win32
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.Build.0 = Release|Win32
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.ActiveCfg = Release|x64
+ {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.Build.0 = Release|x64
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.Build.0 = Debug|Win32
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.ActiveCfg = Debug|x64
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.Build.0 = Debug|x64
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.ActiveCfg = Release|Win32
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.Build.0 = Release|Win32
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.ActiveCfg = Release|x64
+ {3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.Build.0 = Release|x64
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.Build.0 = Debug|Win32
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.ActiveCfg = Debug|x64
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.Build.0 = Debug|x64
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.ActiveCfg = Release|Win32
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.Build.0 = Release|Win32
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.ActiveCfg = Release|x64
+ {73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.Build.0 = Release|x64
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.ActiveCfg = Debug|Win32
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.Build.0 = Debug|Win32
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.ActiveCfg = Debug|x64
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.Build.0 = Debug|x64
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.ActiveCfg = Release|Win32
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.Build.0 = Release|Win32
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.ActiveCfg = Release|x64
+ {ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.Build.0 = Release|x64
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.Build.0 = Debug|Win32
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.ActiveCfg = Debug|x64
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.Build.0 = Debug|x64
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.ActiveCfg = Release|Win32
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.Build.0 = Release|Win32
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.ActiveCfg = Release|x64
+ {38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.Build.0 = Release|x64
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.Build.0 = Debug|Win32
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.ActiveCfg = Debug|x64
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.Build.0 = Debug|x64
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.ActiveCfg = Release|Win32
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.Build.0 = Release|Win32
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.ActiveCfg = Release|x64
+ {D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.Build.0 = Release|x64
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.Build.0 = Debug|Win32
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.ActiveCfg = Debug|x64
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.Build.0 = Debug|x64
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.ActiveCfg = Release|Win32
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.Build.0 = Release|Win32
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.ActiveCfg = Release|x64
+ {C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.Build.0 = Release|x64
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.Build.0 = Debug|Win32
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.ActiveCfg = Debug|x64
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.Build.0 = Debug|x64
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.ActiveCfg = Release|Win32
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.Build.0 = Release|Win32
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.ActiveCfg = Release|x64
+ {FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.Build.0 = Release|x64
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.Build.0 = Debug|Win32
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.ActiveCfg = Debug|x64
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.Build.0 = Debug|x64
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.ActiveCfg = Release|Win32
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.Build.0 = Release|Win32
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.ActiveCfg = Release|x64
+ {A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.Build.0 = Release|x64
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.Build.0 = Debug|Win32
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.ActiveCfg = Debug|x64
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.Build.0 = Debug|x64
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.ActiveCfg = Release|Win32
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.Build.0 = Release|Win32
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.ActiveCfg = Release|x64
+ {8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.Build.0 = Release|x64
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458}.Debug|Win32.Build.0 = Debug|Win32
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458}.Debug|x64.ActiveCfg = Debug|x64
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458}.Debug|x64.Build.0 = Debug|x64
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458}.Release|Win32.ActiveCfg = Release|Win32
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458}.Release|Win32.Build.0 = Release|Win32
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458}.Release|x64.ActiveCfg = Release|x64
+ {F5281B04-A9E0-4680-BBA8-1D7F7D115458}.Release|x64.Build.0 = Release|x64
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86}.Debug|Win32.Build.0 = Debug|Win32
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86}.Debug|x64.ActiveCfg = Debug|x64
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86}.Debug|x64.Build.0 = Debug|x64
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86}.Release|Win32.ActiveCfg = Release|Win32
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86}.Release|Win32.Build.0 = Release|Win32
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86}.Release|x64.ActiveCfg = Release|x64
+ {F5213103-6CBE-46E6-B4CC-2570B6837D86}.Release|x64.Build.0 = Release|x64
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}.Debug|Win32.Build.0 = Debug|Win32
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}.Debug|x64.ActiveCfg = Debug|x64
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}.Debug|x64.Build.0 = Debug|x64
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}.Release|Win32.ActiveCfg = Release|Win32
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}.Release|Win32.Build.0 = Release|Win32
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}.Release|x64.ActiveCfg = Release|x64
+ {DBC0AF0B-B9FF-4B23-905B-4D4CDC2A91CB}.Release|x64.Build.0 = Release|x64
+ {6F744648-D15F-478A-90C6-58E353B5DDB3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6F744648-D15F-478A-90C6-58E353B5DDB3}.Debug|Win32.Build.0 = Debug|Win32
+ {6F744648-D15F-478A-90C6-58E353B5DDB3}.Debug|x64.ActiveCfg = Debug|x64
+ {6F744648-D15F-478A-90C6-58E353B5DDB3}.Debug|x64.Build.0 = Debug|x64
+ {6F744648-D15F-478A-90C6-58E353B5DDB3}.Release|Win32.ActiveCfg = Release|Win32
+ {6F744648-D15F-478A-90C6-58E353B5DDB3}.Release|Win32.Build.0 = Release|Win32
+ {6F744648-D15F-478A-90C6-58E353B5DDB3}.Release|x64.ActiveCfg = Release|x64
+ {6F744648-D15F-478A-90C6-58E353B5DDB3}.Release|x64.Build.0 = Release|x64
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.Build.0 = Debug|Win32
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.ActiveCfg = Debug|x64
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.Build.0 = Debug|x64
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.ActiveCfg = Release|Win32
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.Build.0 = Release|Win32
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.ActiveCfg = Release|x64
+ {97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.Build.0 = Release|x64
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.ActiveCfg = Debug|Win32
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.Build.0 = Debug|Win32
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.ActiveCfg = Debug|x64
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.Build.0 = Debug|x64
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.ActiveCfg = Release|Win32
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.Build.0 = Release|Win32
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.ActiveCfg = Release|x64
+ {77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.Build.0 = Release|x64
+ {86829694-A375-4C58-B4EA-96EF514E3225}.Debug|Win32.ActiveCfg = Debug|Win32
+ {86829694-A375-4C58-B4EA-96EF514E3225}.Debug|Win32.Build.0 = Debug|Win32
+ {86829694-A375-4C58-B4EA-96EF514E3225}.Debug|x64.ActiveCfg = Debug|x64
+ {86829694-A375-4C58-B4EA-96EF514E3225}.Debug|x64.Build.0 = Debug|x64
+ {86829694-A375-4C58-B4EA-96EF514E3225}.Release|Win32.ActiveCfg = Release|Win32
+ {86829694-A375-4C58-B4EA-96EF514E3225}.Release|Win32.Build.0 = Release|Win32
+ {86829694-A375-4C58-B4EA-96EF514E3225}.Release|x64.ActiveCfg = Release|x64
+ {86829694-A375-4C58-B4EA-96EF514E3225}.Release|x64.Build.0 = Release|x64
+ {0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.Build.0 = Debug|Win32
+ {0178B127-6269-407D-B112-93877BB62776}.Debug|x64.ActiveCfg = Debug|x64
+ {0178B127-6269-407D-B112-93877BB62776}.Debug|x64.Build.0 = Debug|x64
+ {0178B127-6269-407D-B112-93877BB62776}.Release|Win32.ActiveCfg = Release|Win32
+ {0178B127-6269-407D-B112-93877BB62776}.Release|Win32.Build.0 = Release|Win32
+ {0178B127-6269-407D-B112-93877BB62776}.Release|x64.ActiveCfg = Release|x64
+ {0178B127-6269-407D-B112-93877BB62776}.Release|x64.Build.0 = Release|x64
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.Build.0 = Debug|Win32
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.ActiveCfg = Debug|x64
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.Build.0 = Debug|x64
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.ActiveCfg = Release|Win32
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.Build.0 = Release|Win32
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.ActiveCfg = Release|x64
+ {73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.Build.0 = Release|x64
+ {C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.Build.0 = Debug|Win32
+ {C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.ActiveCfg = Debug|x64
+ {C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.Build.0 = Debug|x64
+ {C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.ActiveCfg = Release|Win32
+ {C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.Build.0 = Release|Win32
+ {C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.ActiveCfg = Release|x64
+ {C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.Build.0 = Release|x64
+ {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.Build.0 = Debug|Win32
+ {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.ActiveCfg = Debug|x64
+ {37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.Build.0 = Debug|x64
+ {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.ActiveCfg = Release|Win32
+ {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.Build.0 = Release|Win32
+ {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.ActiveCfg = Release|x64
+ {37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.Build.0 = Release|x64
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.Build.0 = Debug|Win32
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.ActiveCfg = Debug|x64
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.Build.0 = Debug|x64
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.ActiveCfg = Release|Win32
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.Build.0 = Release|Win32
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.ActiveCfg = Release|x64
+ {F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.Build.0 = Release|x64
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.Build.0 = Debug|Win32
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.ActiveCfg = Debug|x64
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.Build.0 = Debug|x64
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.ActiveCfg = Release|Win32
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.Build.0 = Release|Win32
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.ActiveCfg = Release|x64
+ {D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.Build.0 = Release|x64
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.Build.0 = Debug|Win32
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.ActiveCfg = Debug|x64
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.Build.0 = Debug|x64
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.ActiveCfg = Release|Win32
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.Build.0 = Release|Win32
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.ActiveCfg = Release|x64
+ {4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.Build.0 = Release|x64
+ {203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.ActiveCfg = Debug|Win32
+ {203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.Build.0 = Debug|Win32
+ {203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.ActiveCfg = Debug|x64
+ {203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.Build.0 = Debug|x64
+ {203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.ActiveCfg = Release|Win32
+ {203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.Build.0 = Release|Win32
+ {203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.ActiveCfg = Release|x64
+ {203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.Build.0 = Release|x64
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.Build.0 = Debug|Win32
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.ActiveCfg = Debug|x64
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.Build.0 = Debug|x64
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.ActiveCfg = Release|Win32
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.Build.0 = Release|Win32
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.ActiveCfg = Release|x64
+ {6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.Build.0 = Release|x64
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.Build.0 = Debug|Win32
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.ActiveCfg = Debug|x64
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.Build.0 = Debug|x64
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.ActiveCfg = Release|Win32
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.Build.0 = Release|Win32
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.ActiveCfg = Release|x64
+ {DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.Build.0 = Release|x64
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.Build.0 = Debug|Win32
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.ActiveCfg = Debug|x64
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.Build.0 = Debug|x64
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.ActiveCfg = Release|Win32
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.Build.0 = Release|Win32
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.ActiveCfg = Release|x64
+ {C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.Build.0 = Release|x64
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.Build.0 = Debug|Win32
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.ActiveCfg = Debug|x64
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.Build.0 = Debug|x64
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.ActiveCfg = Release|Win32
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.Build.0 = Release|Win32
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.ActiveCfg = Release|x64
+ {631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.Build.0 = Release|x64
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.Build.0 = Debug|Win32
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.ActiveCfg = Debug|x64
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.Build.0 = Debug|x64
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.ActiveCfg = Release|Win32
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.Build.0 = Release|Win32
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.ActiveCfg = Release|x64
+ {E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.Build.0 = Release|x64
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Debug|Win32.Build.0 = Debug|Win32
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Debug|x64.ActiveCfg = Debug|x64
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Debug|x64.Build.0 = Debug|x64
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Release|Win32.ActiveCfg = Release|Win32
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Release|Win32.Build.0 = Release|Win32
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Release|x64.ActiveCfg = Release|x64
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF62}.Release|x64.Build.0 = Release|x64
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Debug|Win32.Build.0 = Debug|Win32
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Debug|x64.ActiveCfg = Debug|x64
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Debug|x64.Build.0 = Debug|x64
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Release|Win32.ActiveCfg = Release|Win32
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Release|Win32.Build.0 = Release|Win32
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Release|x64.ActiveCfg = Release|x64
+ {DB312A49-12A9-4E07-9E96-451DC2D8FF61}.Release|x64.Build.0 = Release|x64
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.Build.0 = Debug|Win32
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.ActiveCfg = Debug|x64
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.Build.0 = Debug|x64
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.ActiveCfg = Release|Win32
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.Build.0 = Release|Win32
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.ActiveCfg = Release|x64
+ {62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.Build.0 = Release|x64
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.Build.0 = Debug|Win32
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.ActiveCfg = Debug|x64
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.Build.0 = Debug|x64
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.ActiveCfg = Release|Win32
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.Build.0 = Release|Win32
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.ActiveCfg = Release|x64
+ {9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.Build.0 = Release|x64
+ {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|Win32.Build.0 = Debug|Win32
+ {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|x64.ActiveCfg = Debug|x64
+ {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|x64.Build.0 = Debug|x64
+ {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|Win32.ActiveCfg = Release|Win32
+ {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|Win32.Build.0 = Release|Win32
+ {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|x64.ActiveCfg = Release|x64
+ {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|x64.Build.0 = Release|x64
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.ActiveCfg = Debug|Win32
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.Build.0 = Debug|Win32
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.ActiveCfg = Debug|x64
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.Build.0 = Debug|x64
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.ActiveCfg = Release|Win32
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.Build.0 = Release|Win32
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.ActiveCfg = Release|x64
+ {691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/source/common/Makefile.in b/source/common/Makefile.in
new file mode 100644
index 0000000..45bb981
--- /dev/null
+++ b/source/common/Makefile.in
@@ -0,0 +1,205 @@
+#******************************************************************************
+#
+# Copyright (C) 1999-2009, International Business Machines
+# Corporation and others. All Rights Reserved.
+#
+#******************************************************************************
+## Makefile.in for ICU - icuuc.so
+## Stephen F. Booth
+
+## 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
+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) $(SVC_HOOK_INC)
+
+## Target information
+
+TARGET_STUBNAME=$(COMMON_STUBNAME)
+
+ifneq ($(ENABLE_STATIC),)
+TARGET = $(LIBDIR)/$(LIBSICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(A)
+endif
+
+ifneq ($(ENABLE_SHARED),)
+SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO)
+ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT)
+
+ifeq ($(ENABLE_SO_VERSION_DATA),1)
+SO_VERSION_DATA = common.res
+endif
+
+ifeq ($(OS390BATCH),1)
+BATCH_TARGET = $(BATCH_COMMON_TARGET)
+BATCH_LIBS = $(BATCH_LIBICUDT) -lm
+endif # OS390BATCH
+
+endif # ENABLE_SHARED
+
+ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) $(BATCH_TARGET)
+
+DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS)
+DYNAMICCFLAGS = $(SHAREDLIBCFLAGS)
+DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS)
+CFLAGS += $(LIBCFLAGS)
+CXXFLAGS += $(LIBCXXFLAGS)
+
+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 = errorcode.o 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 \
+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 \
+bytestream.o stringpiece.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_props.o ubidi.o ubidiwrt.o ubidiln.o ushape.o \
+uscript.o usc_impl.o unames.o \
+utrie.o utrie2.o utrie2_builder.o bmpset.o unisetspan.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 \
+serv.o servnotf.o servls.o servlk.o servlkf.o servrbf.o servslkf.o \
+uidna.o usprep.o punycode.o \
+util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o mutex.o dtintrv.o ucnvsel.o propsvec.o \
+ulist.o
+
+## Header files to install
+HEADERS = $(srcdir)/unicode/*.h unicode/*.h
+
+STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))
+
+DEPS = $(OBJECTS:.o=.d)
+
+-include Makefile.local
+
+-include $(SVC_HOOK_INC)
+
+
+## List of phony targets
+.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 :
+
+## 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: $(ALL_TARGETS) unicode/platform.h
+
+install-local: install-headers install-library
+
+install-library: all-local
+ $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
+ifneq ($(ENABLE_STATIC),)
+ $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
+endif
+ifneq ($(ENABLE_SHARED),)
+ $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
+ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
+ cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
+ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
+ cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
+endif
+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 $(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
+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 \
+ 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) $(STATIC_OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA)
+
+distclean-local: clean-local
+ $(RMV) Makefile icucfg.h unicode/platform.h $(SVC_HOOK_INC)
+
+check-local:
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(SVC_HOOK_INC)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+unicode/platform.h: $(srcdir)/unicode/platform.h.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+ifneq ($(ENABLE_STATIC),)
+$(TARGET): $(STATIC_OBJECTS)
+ $(AR) $(ARFLAGS) $(AR_OUTOPT)$@ $^
+ $(RANLIB) $@
+endif
+
+ifneq ($(ENABLE_SHARED),)
+$(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 # ENABLE_SHARED
+
+ifeq (,$(MAKECMDGOALS))
+-include $(DEPS)
+else
+ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
+-include $(DEPS)
+endif
+endif
+
diff --git a/source/common/bmpset.cpp b/source/common/bmpset.cpp
new file mode 100644
index 0000000..db87c70
--- /dev/null
+++ b/source/common/bmpset.cpp
@@ -0,0 +1,723 @@
+/*
+******************************************************************************
+*
+* Copyright (C) 2007-2008, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+* file name: bmpset.cpp
+* encoding: US-ASCII
+* tab size: 8 (not used)
+* indentation:4
+*
+* created on: 2007jan29
+* created by: Markus W. Scherer
+*/
+
+#include "unicode/utypes.h"
+#include "unicode/uniset.h"
+#include "cmemory.h"
+#include "bmpset.h"
+
+U_NAMESPACE_BEGIN
+
+BMPSet::BMPSet(const int32_t *parentList, int32_t parentListLength) :
+ list(parentList), listLength(parentListLength) {
+ uprv_memset(asciiBytes, 0, sizeof(asciiBytes));
+ uprv_memset(table7FF, 0, sizeof(table7FF));
+ uprv_memset(bmpBlockBits, 0, sizeof(bmpBlockBits));
+
+ /*
+ * Set the list indexes for binary searches for
+ * U+0800, U+1000, U+2000, .., U+F000, U+10000.
+ * U+0800 is the first 3-byte-UTF-8 code point. Lower code points are
+ * looked up in the bit tables.
+ * The last pair of indexes is for finding supplementary code points.
+ */
+ list4kStarts[0]=findCodePoint(0x800, 0, listLength-1);
+ int32_t i;
+ for(i=1; i<=0x10; ++i) {
+ list4kStarts[i]=findCodePoint(i<<12, list4kStarts[i-1], listLength-1);
+ }
+ list4kStarts[0x11]=listLength-1;
+
+ initBits();
+ overrideIllegal();
+}
+
+BMPSet::BMPSet(const BMPSet &otherBMPSet, const int32_t *newParentList, int32_t newParentListLength) :
+ list(newParentList), listLength(newParentListLength) {
+ uprv_memcpy(asciiBytes, otherBMPSet.asciiBytes, sizeof(asciiBytes));
+ uprv_memcpy(table7FF, otherBMPSet.table7FF, sizeof(table7FF));
+ uprv_memcpy(bmpBlockBits, otherBMPSet.bmpBlockBits, sizeof(bmpBlockBits));
+ uprv_memcpy(list4kStarts, otherBMPSet.list4kStarts, sizeof(list4kStarts));
+}
+
+BMPSet::~BMPSet() {
+}
+
+/*
+ * Set bits in a bit rectangle in "vertical" bit organization.
+ * start<limit<=0x800
+ */
+static void set32x64Bits(uint32_t table[64], int32_t start, int32_t limit) {
+ int32_t lead=start>>6;
+ int32_t trail=start&0x3f;
+
+ // Set one bit indicating an all-one block.
+ uint32_t bits=(uint32_t)1<<lead;
+ if((start+1)==limit) { // Single-character shortcut.
+ table[trail]|=bits;
+ return;
+ }
+
+ int32_t limitLead=limit>>6;
+ int32_t limitTrail=limit&0x3f;
+
+ if(lead==limitLead) {
+ // Partial vertical bit column.
+ while(trail<limitTrail) {
+ table[trail++]|=bits;
+ }
+ } else {
+ // Partial vertical bit column,
+ // followed by a bit rectangle,
+ // followed by another partial vertical bit column.
+ if(trail>0) {
+ do {
+ table[trail++]|=bits;
+ } while(trail<64);
+ ++lead;
+ }
+ if(lead<limitLead) {
+ bits=~((1<<lead)-1);
+ if(limitLead<0x20) {
+ bits&=(1<<limitLead)-1;
+ }
+ for(trail=0; trail<64; ++trail) {
+ table[trail]|=bits;
+ }
+ }
+ bits=1<<limitLead;
+ for(trail=0; trail<limitTrail; ++trail) {
+ table[trail]|=bits;
+ }
+ }
+}
+
+void BMPSet::initBits() {
+ UChar32 start, limit;
+ int32_t listIndex=0;
+
+ // Set asciiBytes[].
+ do {
+ start=list[listIndex++];
+ if(listIndex<listLength) {
+ limit=list[listIndex++];
+ } else {
+ limit=0x110000;
+ }
+ if(start>=0x80) {
+ break;
+ }
+ do {
+ asciiBytes[start++]=1;
+ } while(start<limit && start<0x80);
+ } while(limit<=0x80);
+
+ // Set table7FF[].
+ while(start<0x800) {
+ set32x64Bits(table7FF, start, limit<=0x800 ? limit : 0x800);
+ if(limit>0x800) {
+ start=0x800;
+ break;
+ }
+
+ start=list[listIndex++];
+ if(listIndex<listLength) {
+ limit=list[listIndex++];
+ } else {
+ limit=0x110000;
+ }
+ }
+
+ // Set bmpBlockBits[].
+ int32_t minStart=0x800;
+ while(start<0x10000) {
+ if(limit>0x10000) {
+ limit=0x10000;
+ }
+
+ if(start<minStart) {
+ start=minStart;
+ }
+ if(start<limit) { // Else: Another range entirely in a known mixed-value block.
+ if(start&0x3f) {
+ // Mixed-value block of 64 code points.
+ start>>=6;
+ bmpBlockBits[start&0x3f]|=0x10001<<(start>>6);
+ start=(start+1)<<6; // Round up to the next block boundary.
+ minStart=start; // Ignore further ranges in this block.
+ }
+ if(start<limit) {
+ if(start<(limit&~0x3f)) {
+ // Multiple all-ones blocks of 64 code points each.
+ set32x64Bits(bmpBlockBits, start>>6, limit>>6);
+ }
+
+ if(limit&0x3f) {
+ // Mixed-value block of 64 code points.
+ limit>>=6;
+ bmpBlockBits[limit&0x3f]|=0x10001<<(limit>>6);
+ limit=(limit+1)<<6; // Round up to the next block boundary.
+ minStart=limit; // Ignore further ranges in this block.
+ }
+ }
+ }
+
+ if(limit==0x10000) {
+ break;
+ }
+
+ start=list[listIndex++];
+ if(listIndex<listLength) {
+ limit=list[listIndex++];
+ } else {
+ limit=0x110000;
+ }
+ }
+}
+
+/*
+ * Override some bits and bytes to the result of contains(FFFD)
+ * for faster validity checking at runtime.
+ * No need to set 0 values where they were reset to 0 in the constructor
+ * and not modified by initBits().
+ * (asciiBytes[] trail bytes, table7FF[] 0..7F, bmpBlockBits[] 0..7FF)
+ * Need to set 0 values for surrogates D800..DFFF.
+ */
+void BMPSet::overrideIllegal() {
+ uint32_t bits, mask;
+ int32_t i;
+
+ if(containsSlow(0xfffd, list4kStarts[0xf], list4kStarts[0x10])) {
+ // contains(FFFD)==TRUE
+ for(i=0x80; i<0xc0; ++i) {
+ asciiBytes[i]=1;
+ }
+
+ bits=3; // Lead bytes 0xC0 and 0xC1.
+ for(i=0; i<64; ++i) {
+ table7FF[i]|=bits;
+ }
+
+ bits=1; // Lead byte 0xE0.
+ for(i=0; i<32; ++i) { // First half of 4k block.
+ bmpBlockBits[i]|=bits;
+ }
+
+ mask=~(0x10001<<0xd); // Lead byte 0xED.
+ bits=1<<0xd;
+ for(i=32; i<64; ++i) { // Second half of 4k block.
+ bmpBlockBits[i]=(bmpBlockBits[i]&mask)|bits;
+ }
+ } else {
+ // contains(FFFD)==FALSE
+ mask=~(0x10001<<0xd); // Lead byte 0xED.
+ for(i=32; i<64; ++i) { // Second half of 4k block.
+ bmpBlockBits[i]&=mask;
+ }
+ }
+}
+
+int32_t BMPSet::findCodePoint(UChar32 c, int32_t lo, int32_t hi) const {
+ /* Examples:
+ findCodePoint(c)
+ set list[] c=0 1 3 4 7 8
+ === ============== ===========
+ [] [110000] 0 0 0 0 0 0
+ [\u0000-\u0003] [0, 4, 110000] 1 1 1 2 2 2
+ [\u0004-\u0007] [4, 8, 110000] 0 0 0 1 1 2
+ [:Any:] [0, 110000] 1 1 1 1 1 1
+ */
+
+ // 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[lo])
+ return lo;
+ // High runner test. c is often after the last range, so an
+ // initial check for this condition pays off.
+ if (lo >= hi || c >= list[hi-1])
+ return hi;
+ // invariant: c >= list[lo]
+ // invariant: c < list[hi]
+ for (;;) {
+ int32_t i = (lo + hi) >> 1;
+ if (i == lo) {
+ break; // Found!
+ } else if (c < list[i]) {
+ hi = i;
+ } else {
+ lo = i;
+ }
+ }
+ return hi;
+}
+
+UBool
+BMPSet::contains(UChar32 c) const {
+ if((uint32_t)c<=0x7f) {
+ return (UBool)asciiBytes[c];
+ } else if((uint32_t)c<=0x7ff) {
+ return (UBool)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0);
+ } else if((uint32_t)c<0xd800 || (c>=0xe000 && c<=0xffff)) {
+ int lead=c>>12;
+ uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
+ if(twoBits<=1) {
+ // All 64 code points with the same bits 15..6
+ // are either in the set or not.
+ return (UBool)twoBits;
+ } else {
+ // Look up the code point in its 4k block of code points.
+ return containsSlow(c, list4kStarts[lead], list4kStarts[lead+1]);
+ }
+ } else if((uint32_t)c<=0x10ffff) {
+ // surrogate or supplementary code point
+ return containsSlow(c, list4kStarts[0xd], list4kStarts[0x11]);
+ } else {
+ // Out-of-range code points get FALSE, consistent with long-standing
+ // behavior of UnicodeSet::contains(c).
+ return FALSE;
+ }
+}
+
+/*
+ * Check for sufficient length for trail unit for each surrogate pair.
+ * Handle single surrogates as surrogate code points as usual in ICU.
+ */
+const UChar *
+BMPSet::span(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const {
+ UChar c, c2;
+
+ if(spanCondition) {
+ // span
+ do {
+ c=*s;
+ if(c<=0x7f) {
+ if(!asciiBytes[c]) {
+ break;
+ }
+ } else if(c<=0x7ff) {
+ if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))==0) {
+ break;
+ }
+ } else if(c<0xd800 || c>=0xe000) {
+ int lead=c>>12;
+ uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
+ if(twoBits<=1) {
+ // All 64 code points with the same bits 15..6
+ // are either in the set or not.
+ if(twoBits==0) {
+ break;
+ }
+ } else {
+ // Look up the code point in its 4k block of code points.
+ if(!containsSlow(c, list4kStarts[lead], list4kStarts[lead+1])) {
+ break;
+ }
+ }
+ } else if(c>=0xdc00 || (s+1)==limit || (c2=s[1])<0xdc00 || c2>=0xe000) {
+ // surrogate code point
+ if(!containsSlow(c, list4kStarts[0xd], list4kStarts[0xe])) {
+ break;
+ }
+ } else {
+ // surrogate pair
+ if(!containsSlow(U16_GET_SUPPLEMENTARY(c, c2), list4kStarts[0x10], list4kStarts[0x11])) {
+ break;
+ }
+ ++s;
+ }
+ } while(++s<limit);
+ } else {
+ // span not
+ do {
+ c=*s;
+ if(c<=0x7f) {
+ if(asciiBytes[c]) {
+ break;
+ }
+ } else if(c<=0x7ff) {
+ if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) {
+ break;
+ }
+ } else if(c<0xd800 || c>=0xe000) {
+ int lead=c>>12;
+ uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
+ if(twoBits<=1) {
+ // All 64 code points with the same bits 15..6
+ // are either in the set or not.
+ if(twoBits!=0) {
+ break;
+ }
+ } else {
+ // Look up the code point in its 4k block of code points.
+ if(containsSlow(c, list4kStarts[lead], list4kStarts[lead+1])) {
+ break;
+ }
+ }
+ } else if(c>=0xdc00 || (s+1)==limit || (c2=s[1])<0xdc00 || c2>=0xe000) {
+ // surrogate code point
+ if(containsSlow(c, list4kStarts[0xd], list4kStarts[0xe])) {
+ break;
+ }
+ } else {
+ // surrogate pair
+ if(containsSlow(U16_GET_SUPPLEMENTARY(c, c2), list4kStarts[0x10], list4kStarts[0x11])) {
+ break;
+ }
+ ++s;
+ }
+ } while(++s<limit);
+ }
+ return s;
+}
+
+/* Symmetrical with span(). */
+const UChar *
+BMPSet::spanBack(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const {
+ UChar c, c2;
+
+ if(spanCondition) {
+ // span
+ for(;;) {
+ c=*(--limit);
+ if(c<=0x7f) {
+ if(!asciiBytes[c]) {
+ break;
+ }
+ } else if(c<=0x7ff) {
+ if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))==0) {
+ break;
+ }
+ } else if(c<0xd800 || c>=0xe000) {
+ int lead=c>>12;
+ uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
+ if(twoBits<=1) {
+ // All 64 code points with the same bits 15..6
+ // are either in the set or not.
+ if(twoBits==0) {
+ break;
+ }
+ } else {
+ // Look up the code point in its 4k block of code points.
+ if(!containsSlow(c, list4kStarts[lead], list4kStarts[lead+1])) {
+ break;
+ }
+ }
+ } else if(c<0xdc00 || s==limit || (c2=*(limit-1))<0xd800 || c2>=0xdc00) {
+ // surrogate code point
+ if(!containsSlow(c, list4kStarts[0xd], list4kStarts[0xe])) {
+ break;
+ }
+ } else {
+ // surrogate pair
+ if(!containsSlow(U16_GET_SUPPLEMENTARY(c2, c), list4kStarts[0x10], list4kStarts[0x11])) {
+ break;
+ }
+ --limit;
+ }
+ if(s==limit) {
+ return s;
+ }
+ }
+ } else {
+ // span not
+ for(;;) {
+ c=*(--limit);
+ if(c<=0x7f) {
+ if(asciiBytes[c]) {
+ break;
+ }
+ } else if(c<=0x7ff) {
+ if((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) {
+ break;
+ }
+ } else if(c<0xd800 || c>=0xe000) {
+ int lead=c>>12;
+ uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
+ if(twoBits<=1) {
+ // All 64 code points with the same bits 15..6
+ // are either in the set or not.
+ if(twoBits!=0) {
+ break;
+ }
+ } else {
+ // Look up the code point in its 4k block of code points.
+ if(containsSlow(c, list4kStarts[lead], list4kStarts[lead+1])) {
+ break;
+ }
+ }
+ } else if(c<0xdc00 || s==limit || (c2=*(limit-1))<0xd800 || c2>=0xdc00) {
+ // surrogate code point
+ if(containsSlow(c, list4kStarts[0xd], list4kStarts[0xe])) {
+ break;
+ }
+ } else {
+ // surrogate pair
+ if(containsSlow(U16_GET_SUPPLEMENTARY(c2, c), list4kStarts[0x10], list4kStarts[0x11])) {
+ break;
+ }
+ --limit;
+ }
+ if(s==limit) {
+ return s;
+ }
+ }
+ }
+ return limit+1;
+}
+
+/*
+ * Precheck for sufficient trail bytes at end of string only once per span.
+ * Check validity.
+ */
+const uint8_t *
+BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const {
+ const uint8_t *limit=s+length;
+ uint8_t b=*s;
+ if((int8_t)b>=0) {
+ // Initial all-ASCII span.
+ if(spanCondition) {
+ do {
+ if(!asciiBytes[b] || ++s==limit) {
+ return s;
+ }
+ b=*s;
+ } while((int8_t)b>=0);
+ } else {
+ do {
+ if(asciiBytes[b] || ++s==limit) {
+ return s;
+ }
+ b=*s;
+ } while((int8_t)b>=0);
+ }
+ length=(int32_t)(limit-s);
+ }
+
+ if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
+ spanCondition=USET_SPAN_CONTAINED; // Pin to 0/1 values.
+ }
+
+ const uint8_t *limit0=limit;
+
+ /*
+ * Make sure that the last 1/2/3/4-byte sequence before limit is complete
+ * or runs into a lead byte.
+ * In the span loop compare s with limit only once
+ * per multi-byte character.
+ *
+ * Give a trailing illegal sequence the same value as the result of contains(FFFD),
+ * including it if that is part of the span, otherwise set limit0 to before
+ * the truncated sequence.
+ */
+ b=*(limit-1);
+ if((int8_t)b<0) {
+ // b>=0x80: lead or trail byte
+ if(b<0xc0) {
+ // single trail byte, check for preceding 3- or 4-byte lead byte
+ if(length>=2 && (b=*(limit-2))>=0xe0) {
+ limit-=2;
+ if(asciiBytes[0x80]!=spanCondition) {
+ limit0=limit;
+ }
+ } else if(b<0xc0 && b>=0x80 && length>=3 && (b=*(limit-3))>=0xf0) {
+ // 4-byte lead byte with only two trail bytes
+ limit-=3;
+ if(asciiBytes[0x80]!=spanCondition) {
+ limit0=limit;
+ }
+ }
+ } else {
+ // lead byte with no trail bytes
+ --limit;
+ if(asciiBytes[0x80]!=spanCondition) {
+ limit0=limit;
+ }
+ }
+ }
+
+ uint8_t t1, t2, t3;
+
+ while(s<limit) {
+ b=*s;
+ if(b<0xc0) {
+ // ASCII; or trail bytes with the result of contains(FFFD).
+ if(spanCondition) {
+ do {
+ if(!asciiBytes[b]) {
+ return s;
+ } else if(++s==limit) {
+ return limit0;
+ }
+ b=*s;
+ } while(b<0xc0);
+ } else {
+ do {
+ if(asciiBytes[b]) {
+ return s;
+ } else if(++s==limit) {
+ return limit0;
+ }
+ b=*s;
+ } while(b<0xc0);
+ }
+ }
+ ++s; // Advance past the lead byte.
+ if(b>=0xe0) {
+ if(b<0xf0) {
+ if( /* handle U+0000..U+FFFF inline */
+ (t1=(uint8_t)(s[0]-0x80)) <= 0x3f &&
+ (t2=(uint8_t)(s[1]-0x80)) <= 0x3f
+ ) {
+ b&=0xf;
+ uint32_t twoBits=(bmpBlockBits[t1]>>b)&0x10001;
+ if(twoBits<=1) {
+ // All 64 code points with this lead byte and middle trail byte
+ // are either in the set or not.
+ if(twoBits!=(uint32_t)spanCondition) {
+ return s-1;
+ }
+ } else {
+ // Look up the code point in its 4k block of code points.
+ UChar32 c=(b<<12)|(t1<<6)|t2;
+ if(containsSlow(c, list4kStarts[b], list4kStarts[b+1]) != spanCondition) {
+ return s-1;
+ }
+ }
+ s+=2;
+ continue;
+ }
+ } else if( /* handle U+10000..U+10FFFF inline */
+ (t1=(uint8_t)(s[0]-0x80)) <= 0x3f &&
+ (t2=(uint8_t)(s[1]-0x80)) <= 0x3f &&
+ (t3=(uint8_t)(s[2]-0x80)) <= 0x3f
+ ) {
+ // Give an illegal sequence the same value as the result of contains(FFFD).
+ UChar32 c=((UChar32)(b-0xf0)<<18)|((UChar32)t1<<12)|(t2<<6)|t3;
+ if( ( (0x10000<=c && c<=0x10ffff) ?
+ containsSlow(c, list4kStarts[0x10], list4kStarts[0x11]) :
+ asciiBytes[0x80]
+ ) != spanCondition
+ ) {
+ return s-1;
+ }
+ s+=3;
+ continue;
+ }
+ } else /* 0xc0<=b<0xe0 */ {
+ if( /* handle U+0000..U+07FF inline */
+ (t1=(uint8_t)(*s-0x80)) <= 0x3f
+ ) {
+ if((USetSpanCondition)((table7FF[t1]&((uint32_t)1<<(b&0x1f)))!=0) != spanCondition) {
+ return s-1;
+ }
+ ++s;
+ continue;
+ }
+ }
+
+ // Give an illegal sequence the same value as the result of contains(FFFD).
+ // Handle each byte of an illegal sequence separately to simplify the code;
+ // no need to optimize error handling.
+ if(asciiBytes[0x80]!=spanCondition) {
+ return s-1;
+ }
+ }
+
+ return limit0;
+}
+
+/*
+ * While going backwards through UTF-8 optimize only for ASCII.
+ * Unlike UTF-16, UTF-8 is not forward-backward symmetrical, that is, it is not
+ * possible to tell from the last byte in a multi-byte sequence how many
+ * preceding bytes there should be. Therefore, going backwards through UTF-8
+ * is much harder than going forward.
+ */
+int32_t
+BMPSet::spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const {
+ if(spanCondition!=USET_SPAN_NOT_CONTAINED) {
+ spanCondition=USET_SPAN_CONTAINED; // Pin to 0/1 values.
+ }
+
+ uint8_t b;
+
+ do {
+ b=s[--length];
+ if((int8_t)b>=0) {
+ // ASCII sub-span
+ if(spanCondition) {
+ do {
+ if(!asciiBytes[b]) {
+ return length+1;
+ } else if(length==0) {
+ return 0;
+ }
+ b=s[--length];
+ } while((int8_t)b>=0);
+ } else {
+ do {
+ if(asciiBytes[b]) {
+ return length+1;
+ } else if(length==0) {
+ return 0;
+ }
+ b=s[--length];
+ } while((int8_t)b>=0);
+ }
+ }
+
+ int32_t prev=length;
+ UChar32 c;
+ if(b<0xc0) {
+ // trail byte: collect a multi-byte character
+ c=utf8_prevCharSafeBody(s, 0, &length, b, -1);
+ if(c<0) {
+ c=0xfffd;
+ }
+ } else {
+ // lead byte in last-trail position
+ c=0xfffd;
+ }
+ // c is a valid code point, not ASCII, not a surrogate
+ if(c<=0x7ff) {
+ if((USetSpanCondition)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0) != spanCondition) {
+ return prev+1;
+ }
+ } else if(c<=0xffff) {
+ int lead=c>>12;
+ uint32_t twoBits=(bmpBlockBits[(c>>6)&0x3f]>>lead)&0x10001;
+ if(twoBits<=1) {
+ // All 64 code points with the same bits 15..6
+ // are either in the set or not.
+ if(twoBits!=(uint32_t)spanCondition) {
+ return prev+1;
+ }
+ } else {
+ // Look up the code point in its 4k block of code points.
+ if(containsSlow(c, list4kStarts[lead], list4kStarts[lead+1]) != spanCondition) {
+ return prev+1;
+ }
+ }
+ } else {
+ if(containsSlow(c, list4kStarts[0x10], list4kStarts[0x11]) != spanCondition) {
+ return prev+1;
+ }
+ }
+ } while(length>0);
+ return 0;
+}
+
+U_NAMESPACE_END
diff --git a/source/common/bmpset.h b/source/common/bmpset.h
new file mode 100644
index 0000000..d9e08ea
--- /dev/null
+++ b/source/common/bmpset.h
@@ -0,0 +1,161 @@
+/*
+******************************************************************************
+*
+* Copyright (C) 2007, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+* file name: bmpset.h
+* encoding: US-ASCII
+* tab size: 8 (not used)
+* indentation:4
+*
+* created on: 2007jan29
+* created by: Markus W. Scherer
+*/
+
+#ifndef __BMPSET_H__
+#define __BMPSET_H__
+
+#include "unicode/utypes.h"
+#include "unicode/uniset.h"
+
+U_NAMESPACE_BEGIN
+
+/*
+ * Helper class for frozen UnicodeSets, implements contains() and span()
+ * optimized for BMP code points. Structured to be UTF-8-friendly.
+ *
+ * ASCII: Look up bytes.
+ * 2-byte characters: Bits organized vertically.
+ * 3-byte characters: Use zero/one/mixed data per 64-block in U+0000..U+FFFF,
+ * with mixed for illegal ranges.
+ * Supplementary characters: Call contains() on the parent set.
+ */
+class BMPSet : public UMemory {
+public:
+ BMPSet(const int32_t *parentList, int32_t parentListLength);
+ BMPSet(const BMPSet &otherBMPSet, const int32_t *newParentList, int32_t newParentListLength);
+ virtual ~BMPSet();
+
+ virtual UBool contains(UChar32 c) const;
+
+ /*
+ * Span the initial substring for which each character c has spanCondition==contains(c).
+ * It must be s<limit and spanCondition==0 or 1.
+ * @return The string pointer which limits the span.
+ */
+ const UChar *span(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const;
+
+ /*
+ * Span the trailing substring for which each character c has spanCondition==contains(c).
+ * It must be s<limit and spanCondition==0 or 1.
+ * @return The string pointer which starts the span.
+ */
+ const UChar *spanBack(const UChar *s, const UChar *limit, USetSpanCondition spanCondition) const;
+
+ /*
+ * Span the initial substring for which each character c has spanCondition==contains(c).
+ * It must be length>0 and spanCondition==0 or 1.
+ * @return The string pointer which limits the span.
+ */
+ const uint8_t *spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const;
+
+ /*
+ * Span the trailing substring for which each character c has spanCondition==contains(c).
+ * It must be length>0 and spanCondition==0 or 1.
+ * @return The start of the span.
+ */
+ int32_t spanBackUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const;
+
+private:
+ void initBits();
+ void overrideIllegal();
+
+ /**
+ * Same as UnicodeSet::findCodePoint(UChar32 c) const except that the
+ * binary search is restricted for finding code points in a certain range.
+ *
+ * For restricting the search for finding in the range start..end,
+ * pass in
+ * lo=findCodePoint(start) and
+ * hi=findCodePoint(end)
+ * with 0<=lo<=hi<len.
+ * findCodePoint(c) defaults to lo=0 and hi=len-1.
+ *
+ * @param c a character in a subrange of MIN_VALUE..MAX_VALUE
+ * @param lo The lowest index to be returned.
+ * @param hi The highest index to be returned.
+ * @return the smallest integer i in the range lo..hi,
+ * inclusive, such that c < list[i]
+ */
+ int32_t findCodePoint(UChar32 c, int32_t lo, int32_t hi) const;
+
+ inline UBool containsSlow(UChar32 c, int32_t lo, int32_t hi) const;
+
+ /*
+ * One byte per ASCII character, or trail byte in lead position.
+ * 0 or 1 for ASCII characters.
+ * The value for trail bytes is the result of contains(FFFD)
+ * for faster validity checking at runtime.
+ */
+ UBool asciiBytes[0xc0];
+
+ /*
+ * One bit per code point from U+0000..U+07FF.
+ * The bits are organized vertically; consecutive code points
+ * correspond to the same bit positions in consecutive table words.
+ * With code point parts
+ * lead=c{10..6}
+ * trail=c{5..0}
+ * it is set.contains(c)==(table7FF[trail] bit lead)
+ *
+ * Bits for 0..7F (non-shortest forms) are set to the result of contains(FFFD)
+ * for faster validity checking at runtime.
+ */
+ uint32_t table7FF[64];
+
+ /*
+ * One bit per 64 BMP code points.
+ * The bits are organized vertically; consecutive 64-code point blocks
+ * correspond to the same bit position in consecutive table words.
+ * With code point parts
+ * lead=c{15..12}
+ * t1=c{11..6}
+ * test bits (lead+16) and lead in bmpBlockBits[t1].
+ * If the upper bit is 0, then the lower bit indicates if contains(c)
+ * for all code points in the 64-block.
+ * If the upper bit is 1, then the block is mixed and set.contains(c)
+ * must be called.
+ *
+ * Bits for 0..7FF (non-shortest forms) and D800..DFFF are set to
+ * the result of contains(FFFD) for faster validity checking at runtime.
+ */
+ uint32_t bmpBlockBits[64];
+
+ /*
+ * Inversion list indexes for restricted binary searches in
+ * findCodePoint(), from
+ * findCodePoint(U+0800, U+1000, U+2000, .., U+F000, U+10000).
+ * U+0800 is the first 3-byte-UTF-8 code point. Code points below U+0800 are
+ * always looked up in the bit tables.
+ * The last pair of indexes is for finding supplementary code points.
+ */
+ int32_t list4kStarts[18];
+
+ /*
+ * The inversion list of the parent set, for the slower contains() implementation
+ * for mixed BMP blocks and for supplementary code points.
+ * The list is terminated with list[listLength-1]=0x110000.
+ */
+ const int32_t *list;
+ int32_t listLength;
+};
+
+inline UBool BMPSet::containsSlow(UChar32 c, int32_t lo, int32_t hi) const {
+ return (UBool)(findCodePoint(c, lo, hi) & 1);
+}
+
+U_NAMESPACE_END
+
+#endif
diff --git a/source/common/brkeng.cpp b/source/common/brkeng.cpp
new file mode 100644
index 0000000..2419be5
--- /dev/null
+++ b/source/common/brkeng.cpp
@@ -0,0 +1,290 @@
+/**
+ ************************************************************************************
+ * Copyright (C) 2006-2007, 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 "umutex.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 U_NAMESPACE_QUALIFIER 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;
+
+ // TODO: The global mutex should not be used.
+ // The global mutex should only be used for short periods.
+ // A ICULanguageBreakFactory specific mutex should be used.
+ 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/source/common/brkeng.h b/source/common/brkeng.h
new file mode 100644
index 0000000..618b2ae
--- /dev/null
+++ b/source/common/brkeng.h
@@ -0,0 +1,292 @@
+/**
+ ************************************************************************************
+ * Copyright (C) 2006-2007, 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
+ */
+
+/**
+ * <p>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.</p>
+ *
+ * <p>LanguageBreakEngines should normally be implemented so as to
+ * be shared between threads without locking.</p>
+ */
+class LanguageBreakEngine : public UMemory {
+ public:
+
+ /**
+ * <p>Default constructor.</p>
+ *
+ */
+ LanguageBreakEngine();
+
+ /**
+ * <p>Virtual destructor.</p>
+ */
+ virtual ~LanguageBreakEngine();
+
+ /**
+ * <p>Indicate whether this engine handles a particular character for
+ * a particular kind of break.</p>
+ *
+ * @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;
+
+ /**
+ * <p>Find any breaks within a run in the supplied text.</p>
+ *
+ * @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
+ */
+
+/**
+ * <p>LanguageBreakFactorys find and return a LanguageBreakEngine
+ * that can determine breaks for characters in a specific set, if
+ * such an object can be found.</p>
+ *
+ * <p>If a LanguageBreakFactory is to be shared between threads,
+ * appropriate synchronization must be used; there is none internal
+ * to the factory.</p>
+ *
+ * <p>A LanguageBreakEngine returned by a LanguageBreakFactory can
+ * normally be shared between threads without synchronization, unless
+ * the specific subclass of LanguageBreakFactory indicates otherwise.</p>
+ *
+ * <p>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.</p>
+ */
+class LanguageBreakFactory : public UMemory {
+ public:
+
+ /**
+ * <p>Default constructor.</p>
+ *
+ */
+ LanguageBreakFactory();
+
+ /**
+ * <p>Virtual destructor.</p>
+ */
+ virtual ~LanguageBreakFactory();
+
+ /**
+ * <p>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.</p>
+ *
+ * @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
+ */
+
+/**
+ * <p>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.</p>
+ *
+ * <p>UnhandledEngines may not be shared between threads without
+ * external synchronization.</p>
+ */
+
+class UnhandledEngine : public LanguageBreakEngine {
+ private:
+
+ /**
+ * The sets of characters handled, for each break type
+ * @internal
+ */
+
+ UnicodeSet *fHandled[4];
+
+ public:
+
+ /**
+ * <p>Default constructor.</p>
+ *
+ */
+ UnhandledEngine(UErrorCode &status);
+
+ /**
+ * <p>Virtual destructor.</p>
+ */
+ virtual ~UnhandledEngine();
+
+ /**
+ * <p>Indicate whether this engine handles a particular character for
+ * a particular kind of break.</p>
+ *
+ * @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;
+
+ /**
+ * <p>Find any breaks within a run in the supplied text.</p>
+ *
+ * @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;
+
+ /**
+ * <p>Tell the engine to handle a particular character and break type.</p>
+ *
+ * @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
+ */
+
+/**
+ * <p>ICULanguageBreakFactory is the default LanguageBreakFactory for
+ * ICU. It creates dictionary-based LanguageBreakEngines from dictionary
+ * data in the ICU data file.</p>
+ */
+class ICULanguageBreakFactory : public LanguageBreakFactory {
+ private:
+
+ /**
+ * The stack of break engines created by this factory
+ * @internal
+ */
+
+ UStack *fEngines;
+
+ public:
+
+ /**
+ * <p>Standard constructor.</p>
+ *
+ */
+ ICULanguageBreakFactory(UErrorCode &status);
+
+ /**
+ * <p>Virtual destructor.</p>
+ */
+ virtual ~ICULanguageBreakFactory();
+
+ /**
+ * <p>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.</p>
+ *
+ * @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:
+
+ /**
+ * <p>Create a LanguageBreakEngine for the set of characters to which
+ * the supplied character belongs, for the specified break type.</p>
+ *
+ * @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);
+
+ /**
+ * <p>Create a CompactTrieDictionary for the specified script and break type.</p>
+ *
+ * @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/source/common/brkiter.cpp b/source/common/brkiter.cpp
new file mode 100644
index 0000000..9e6ee4d
--- /dev/null
+++ b/source/common/brkiter.cpp
@@ -0,0 +1,463 @@
+/*
+*******************************************************************************
+* Copyright (C) 1997-2008, International Business Machines Corporation and *
+* others. All Rights Reserved. *
+*******************************************************************************
+*
+* File TXTBDRY.CPP
+*
+* Modification History:
+*
+* Date Name Description
+* 02/18/97 aliu Converted from OpenClass. Added DONE.
+* 01/13/2000 helena Added UErrorCode parameter to createXXXInstance methods.
+*****************************************************************************************
+*/
+
+// *****************************************************************************
+// This file was generated from the java source file BreakIterator.java
+// *****************************************************************************
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#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 "umutex.h"
+#include "servloc.h"
+#include "locbased.h"
+#include "uresimp.h"
+#include "uassert.h"
+#include "ubrkimpl.h"
+
+// *****************************************************************************
+// class BreakIterator
+// This class implements methods for finding the location of boundaries in text.
+// Instances of BreakIterator maintain a current position and scan over text
+// returning the index of characters where boundaries occur.
+// *****************************************************************************
+
+U_NAMESPACE_BEGIN
+
+// -------------------------------------
+
+BreakIterator*
+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;
+ UResourceBundle brkNameStack;
+ UResourceBundle *brkRules = &brkRulesStack;
+ UResourceBundle *brkName = &brkNameStack;
+ RuleBasedBreakIterator *result = NULL;
+
+ if (U_FAILURE(status))
+ return NULL;
+
+ ures_initStackObject(brkRules);
+ ures_initStackObject(brkName);
+
+ // Get the locale
+ 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)) {
+ brkRules = ures_getByKeyWithFallback(b, "boundaries", brkRules, &status);
+ // Get the string object naming the rules file
+ brkName = ures_getByKeyWithFallback(brkRules, type, brkName, &status);
+ // Get the actual string
+ brkfname = ures_getString(brkName, &size, &status);
+ U_ASSERT((size_t)size<sizeof(fnbuff));
+ if ((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]));
+
+ 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(U_ICUDATA_BRKITR, ext, fnbuff, &status);
+ if (U_FAILURE(status)) {
+ ures_close(b);
+ return NULL;
+ }
+
+ // Create a RuleBasedBreakIterator
+ result = new RuleBasedBreakIterator(file, status);
+
+ // 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, *(BreakIterator*)result);
+ locBased.setLocaleIDs(ures_getLocaleByType(b, ULOC_VALID_LOCALE, &status), actualLocale);
+ result->setBreakType(kind);
+ }
+
+ ures_close(b);
+
+ if (U_FAILURE(status) && result != NULL) { // Sometimes redundant check, but simple
+ delete result;
+ return NULL;
+ }
+
+ if (result == NULL) {
+ udata_close(file);
+ if (U_SUCCESS(status)) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ }
+
+ return result;
+}
+
+// Creates a break iterator for word breaks.
+BreakIterator* U_EXPORT2
+BreakIterator::createWordInstance(const Locale& key, UErrorCode& status)
+{
+ return createInstance(key, UBRK_WORD, status);
+}
+
+// -------------------------------------
+
+// Creates a break iterator for line breaks.
+BreakIterator* U_EXPORT2
+BreakIterator::createLineInstance(const Locale& key, UErrorCode& status)
+{
+ return createInstance(key, UBRK_LINE, status);
+}
+
+// -------------------------------------
+
+// Creates a break iterator for character breaks.
+BreakIterator* U_EXPORT2
+BreakIterator::createCharacterInstance(const Locale& key, UErrorCode& status)
+{
+ return createInstance(key, UBRK_CHARACTER, status);
+}
+
+// -------------------------------------
+
+// Creates a break iterator for sentence breaks.
+BreakIterator* U_EXPORT2
+BreakIterator::createSentenceInstance(const Locale& key, UErrorCode& status)
+{
+ return createInstance(key, UBRK_SENTENCE, status);
+}
+
+// -------------------------------------
+
+// Creates a break iterator for title casing breaks.
+BreakIterator* U_EXPORT2
+BreakIterator::createTitleInstance(const Locale& key, UErrorCode& status)
+{
+ return createInstance(key, UBRK_TITLE, status);
+}
+
+// -------------------------------------
+
+// Gets all the available locales that has localized text boundary data.
+const Locale* U_EXPORT2
+BreakIterator::getAvailableLocales(int32_t& count)
+{
+ return Locale::getAvailableLocales(count);
+}
+
+// -------------------------------------
+// Gets the objectLocale display name in the default locale language.
+UnicodeString& U_EXPORT2
+BreakIterator::getDisplayName(const Locale& objectLocale,
+ UnicodeString& name)
+{
+ return objectLocale.getDisplayName(name);
+}
+
+// -------------------------------------
+// Gets the objectLocale display name in the displayLocale language.
+UnicodeString& U_EXPORT2
+BreakIterator::getDisplayName(const Locale& objectLocale,
+ const Locale& displayLocale,
+ UnicodeString& name)
+{
+ return objectLocale.getDisplayName(displayLocale, name);
+}
+
+// ------------------------------------------
+//
+// Default constructor and destructor
+//
+//-------------------------------------------
+
+BreakIterator::BreakIterator()
+{
+ fBufferClone = FALSE;
+ *validLocale = *actualLocale = 0;
+}
+
+BreakIterator::~BreakIterator()
+{
+}
+
+// ------------------------------------------
+//
+// Registration
+//
+//-------------------------------------------
+#if !UCONFIG_NO_SERVICE
+
+// -------------------------------------
+
+class ICUBreakIteratorFactory : public ICUResourceBundleFactory {
+protected:
+ virtual UObject* handleCreate(const Locale& loc, int32_t kind, const ICUService* /*service*/, UErrorCode& status) const {
+ return BreakIterator::makeInstance(loc, kind, status);
+ }
+};
+
+// -------------------------------------
+
+class ICUBreakIteratorService : public ICULocaleService {
+public:
+ ICUBreakIteratorService()
+ : ICULocaleService(UNICODE_STRING("Break Iterator", 14))
+ {
+ UErrorCode status = U_ZERO_ERROR;
+ registerFactory(new ICUBreakIteratorFactory(), status);
+ }
+
+ virtual UObject* cloneInstance(UObject* instance) const {
+ return ((BreakIterator*)instance)->clone();
+ }
+
+ virtual UObject* handleDefault(const ICUServiceKey& key, UnicodeString* /*actualID*/, UErrorCode& status) const {
+ LocaleKey& lkey = (LocaleKey&)key;
+ int32_t kind = lkey.kind();
+ Locale loc;
+ lkey.currentLocale(loc);
+ return BreakIterator::makeInstance(loc, kind, status);
+ }
+
+ virtual UBool isDefault() const {
+ return countFactories() == 1;
+ }
+};
+
+// -------------------------------------
+
+U_NAMESPACE_END
+
+// defined in ucln_cmn.h
+
+static U_NAMESPACE_QUALIFIER ICULocaleService* gService = NULL;
+
+/**
+ * Release all static memory held by breakiterator.
+ */
+U_CDECL_BEGIN
+static UBool U_CALLCONV breakiterator_cleanup(void) {
+#if !UCONFIG_NO_SERVICE
+ if (gService) {
+ delete gService;
+ gService = NULL;
+ }
+#endif
+ return TRUE;
+}
+U_CDECL_END
+U_NAMESPACE_BEGIN
+
+static ICULocaleService*
+getService(void)
+{
+ UBool needsInit;
+ UMTX_CHECK(NULL, (UBool)(gService == NULL), needsInit);
+
+ if (needsInit) {
+ ICULocaleService *tService = new ICUBreakIteratorService();
+ umtx_lock(NULL);
+ if (gService == NULL) {
+ gService = tService;
+ tService = NULL;
+ ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR, breakiterator_cleanup);
+ }
+ umtx_unlock(NULL);
+ delete tService;
+ }
+ return gService;
+}
+
+// -------------------------------------
+
+static inline UBool
+hasService(void)
+{
+ UBool retVal;
+ UMTX_CHECK(NULL, gService != NULL, retVal);
+ return retVal;
+}
+
+// -------------------------------------
+
+URegistryKey U_EXPORT2
+BreakIterator::registerInstance(BreakIterator* toAdopt, const Locale& locale, UBreakIteratorType kind, UErrorCode& status)
+{
+ ICULocaleService *service = getService();
+ if (service == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ return NULL;
+ }
+ return service->registerInstance(toAdopt, locale, kind, status);
+}
+
+// -------------------------------------
+
+UBool U_EXPORT2
+BreakIterator::unregister(URegistryKey key, UErrorCode& status)
+{
+ if (U_SUCCESS(status)) {
+ if (hasService()) {
+ return gService->unregister(key, status);
+ }
+ status = U_MEMORY_ALLOCATION_ERROR;
+ }
+ return FALSE;
+}
+
+// -------------------------------------
+
+StringEnumeration* U_EXPORT2
+BreakIterator::getAvailableLocales(void)
+{
+ ICULocaleService *service = getService();
+ if (service == NULL) {
+ return NULL;
+ }
+ return service->getAvailableLocales();
+}
+#endif /* UCONFIG_NO_SERVICE */
+
+// -------------------------------------
+
+BreakIterator*
+BreakIterator::createInstance(const Locale& loc, int32_t kind, UErrorCode& status)
+{
+ if (U_FAILURE(status)) {
+ return NULL;
+ }
+
+ u_init(&status);
+#if !UCONFIG_NO_SERVICE
+ if (hasService()) {
+ 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
+ // will be populated, but if the handleDefault path is taken
+ // (because nothing is registered that can handle the
+ // requested locale) then the actualLoc comes back empty. In
+ // that case, the returned object already has its actual/valid
+ // locale data populated (by makeInstance, which is what
+ // handleDefault calls), so we don't touch it. YES, A COMMENT
+ // THIS LONG is a sign of bad code -- so the action item is to
+ // revisit this in ICU 3.0 and clean it up/fix it/remove it.
+ if (U_SUCCESS(status) && (result != NULL) && *actualLoc.getName() != 0) {
+ U_LOCALE_BASED(locBased, *result);
+ locBased.setLocaleIDs(actualLoc.getName(), actualLoc.getName());
+ }
+ return result;
+ }
+ else
+#endif
+ {
+ return makeInstance(loc, kind, status);
+ }
+}
+
+// -------------------------------------
+
+BreakIterator*
+BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status)
+{
+
+ if (U_FAILURE(status)) {
+ return NULL;
+ }
+
+ BreakIterator *result = NULL;
+ switch (kind) {
+ case UBRK_CHARACTER:
+ result = BreakIterator::buildInstance(loc, "grapheme", kind, status);
+ break;
+ case UBRK_WORD:
+ result = BreakIterator::buildInstance(loc, "word", kind, status);
+ break;
+ case UBRK_LINE:
+ result = BreakIterator::buildInstance(loc, "line", kind, status);
+ break;
+ case UBRK_SENTENCE:
+ result = BreakIterator::buildInstance(loc, "sentence", kind, status);
+ break;
+ case UBRK_TITLE:
+ result = BreakIterator::buildInstance(loc, "title", kind, status);
+ break;
+ default:
+ status = U_ILLEGAL_ARGUMENT_ERROR;
+ }
+
+ if (U_FAILURE(status)) {
+ return NULL;
+ }
+
+ return result;
+}
+
+Locale
+BreakIterator::getLocale(ULocDataLocaleType type, UErrorCode& status) const {
+ U_LOCALE_BASED(locBased, *this);
+ return locBased.getLocale(type, status);
+}
+
+const char *
+BreakIterator::getLocaleID(ULocDataLocaleType type, UErrorCode& status) const {
+ U_LOCALE_BASED(locBased, *this);
+ return locBased.getLocaleID(type, status);
+}
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
+//eof
diff --git a/source/common/bytestream.cpp b/source/common/bytestream.cpp
new file mode 100644
index 0000000..110c085
--- /dev/null
+++ b/source/common/bytestream.cpp
@@ -0,0 +1,65 @@
+// Copyright (C) 2009, International Business Machines
+// Corporation and others. All Rights Reserved.
+//
+// Copyright 2007 Google Inc. All Rights Reserved.
+// Author: sanjay@google.com (Sanjay Ghemawat)
+
+#include "unicode/utypes.h"
+#include "unicode/bytestream.h"
+#include "cmemory.h"
+
+U_NAMESPACE_BEGIN
+
+char* ByteSink::GetAppendBuffer(int32_t min_capacity,
+ int32_t desired_capacity_hint,
+ char* scratch, int32_t scratch_capacity,
+ int32_t* result_capacity) {
+ if (min_capacity < 1 || scratch_capacity < min_capacity) {
+ *result_capacity = 0;
+ return NULL;
+ }
+ *result_capacity = scratch_capacity;
+ return scratch;
+}
+
+void ByteSink::Flush() {}
+
+CheckedArrayByteSink::CheckedArrayByteSink(char* outbuf, int32_t capacity)
+ : outbuf_(outbuf), capacity_(capacity < 0 ? 0 : capacity), size_(0), overflowed_(false) {
+}
+
+void CheckedArrayByteSink::Append(const char* bytes, int32_t n) {
+ if (n <= 0) {
+ return;
+ }
+ int32_t available = capacity_ - size_;
+ if (n > available) {
+ n = available;
+ overflowed_ = true;
+ }
+ if (n > 0 && bytes != (outbuf_ + size_)) {
+ uprv_memcpy(outbuf_ + size_, bytes, n);
+ }
+ size_ += n;
+}
+
+char* CheckedArrayByteSink::GetAppendBuffer(int32_t min_capacity,
+ int32_t desired_capacity_hint,
+ char* scratch,
+ int32_t scratch_capacity,
+ int32_t* result_capacity) {
+ if (min_capacity < 1 || scratch_capacity < min_capacity) {
+ *result_capacity = 0;
+ return NULL;
+ }
+ int32_t available = capacity_ - size_;
+ if (available >= min_capacity) {
+ *result_capacity = available;
+ return outbuf_ + size_;
+ } else {
+ *result_capacity = scratch_capacity;
+ return scratch;
+ }
+}
+
+U_NAMESPACE_END
diff --git a/source/common/caniter.cpp b/source/common/caniter.cpp
new file mode 100644
index 0000000..04d48ba
--- /dev/null
+++ b/source/common/caniter.cpp
@@ -0,0 +1,611 @@
+/*
+ *****************************************************************************
+ * Copyright (C) 1996-2006, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *****************************************************************************
+ */
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_NORMALIZATION
+
+#include "unicode/uset.h"
+#include "unicode/ustring.h"
+#include "hash.h"
+#include "unormimp.h"
+#include "unicode/caniter.h"
+#include "unicode/normlzr.h"
+#include "unicode/uchar.h"
+#include "cmemory.h"
+
+/**
+ * This class allows one to iterate through all the strings that are canonically equivalent to a given
+ * string. For example, here are some sample results:
+Results for: {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
+1: \u0041\u030A\u0064\u0307\u0327
+ = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
+2: \u0041\u030A\u0064\u0327\u0307
+ = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
+3: \u0041\u030A\u1E0B\u0327
+ = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
+4: \u0041\u030A\u1E11\u0307
+ = {LATIN CAPITAL LETTER A}{COMBINING RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
+5: \u00C5\u0064\u0307\u0327
+ = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
+6: \u00C5\u0064\u0327\u0307
+ = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
+7: \u00C5\u1E0B\u0327
+ = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
+8: \u00C5\u1E11\u0307
+ = {LATIN CAPITAL LETTER A WITH RING ABOVE}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
+9: \u212B\u0064\u0307\u0327
+ = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING DOT ABOVE}{COMBINING CEDILLA}
+10: \u212B\u0064\u0327\u0307
+ = {ANGSTROM SIGN}{LATIN SMALL LETTER D}{COMBINING CEDILLA}{COMBINING DOT ABOVE}
+11: \u212B\u1E0B\u0327
+ = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH DOT ABOVE}{COMBINING CEDILLA}
+12: \u212B\u1E11\u0307
+ = {ANGSTROM SIGN}{LATIN SMALL LETTER D WITH CEDILLA}{COMBINING DOT ABOVE}
+ *<br>Note: the code is intended for use with small strings, and is not suitable for larger ones,
+ * since it has not been optimized for that situation.
+ *@author M. Davis
+ *@draft
+ */
+
+// public
+
+U_NAMESPACE_BEGIN
+
+// TODO: add boilerplate methods.
+
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CanonicalIterator)
+
+/**
+ *@param source string to get results for
+ */
+CanonicalIterator::CanonicalIterator(const UnicodeString &sourceStr, UErrorCode &status) :
+ pieces(NULL),
+ pieces_length(0),
+ pieces_lengths(NULL),
+ current(NULL),
+ current_length(0)
+{
+ if(U_SUCCESS(status)) {
+ setSource(sourceStr, status);
+ }
+}
+
+CanonicalIterator::~CanonicalIterator() {
+ cleanPieces();
+}
+
+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;
+ pieces_length = 0;
+ }
+ if(pieces_lengths != NULL) {
+ uprv_free(pieces_lengths);
+ pieces_lengths = NULL;
+ }
+ if(current != NULL) {
+ uprv_free(current);
+ current = NULL;
+ current_length = 0;
+ }
+}
+
+/**
+ *@return gets the source: NOTE: it is the NFD form of source
+ */
+UnicodeString CanonicalIterator::getSource() {
+ return source;
+}
+
+/**
+ * Resets the iterator so that one can start again from the beginning.
+ */
+void CanonicalIterator::reset() {
+ done = FALSE;
+ for (int i = 0; i < current_length; ++i) {
+ current[i] = 0;
+ }
+}
+
+/**
+ *@return the next string that is canonically equivalent. The value null is returned when
+ * the iteration is done.
+ */
+UnicodeString CanonicalIterator::next() {
+ int32_t i = 0;
+
+ if (done) {
+ buffer.setToBogus();
+ return buffer;
+ }
+
+ // delete old contents
+ buffer.remove();
+
+ // construct return value
+
+ for (i = 0; i < pieces_length; ++i) {
+ buffer.append(pieces[i][current[i]]);
+ }
+ //String result = buffer.toString(); // not needed
+
+ // find next value for next time
+
+ for (i = current_length - 1; ; --i) {
+ if (i < 0) {
+ done = TRUE;
+ break;
+ }
+ current[i]++;
+ if (current[i] < pieces_lengths[i]) break; // got sequence
+ current[i] = 0;
+ }
+ return buffer;
+}
+
+/**
+ *@param set the source string to iterate against. This allows the same iterator to be used
+ * 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;
+ }
+ done = FALSE;
+
+ cleanPieces();
+
+ // catch degenerate case
+ if (newSource.length() == 0) {
+ pieces = (UnicodeString **)uprv_malloc(sizeof(UnicodeString *));
+ pieces_lengths = (int32_t*)uprv_malloc(1 * sizeof(int32_t));
+ pieces_length = 1;
+ current = (int32_t*)uprv_malloc(1 * sizeof(int32_t));
+ current_length = 1;
+ if (pieces == NULL || pieces_lengths == NULL || current == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ goto CleanPartialInitialization;
+ }
+ current[0] = 0;
+ pieces[0] = new UnicodeString[1];
+ pieces_lengths[0] = 1;
+ if (pieces[0] == 0) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ goto CleanPartialInitialization;
+ }
+ return;
+ }
+
+
+ list = new UnicodeString[source.length()];
+ if (list == 0) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ goto CleanPartialInitialization;
+ }
+
+ // i should initialy be the number of code units at the
+ // start of the string
+ i = UTF16_CHAR_LENGTH(source.char32At(0));
+ //int32_t i = 1;
+ // find the segments
+ // This code iterates through the source string and
+ // extracts segments that end up on a codepoint that
+ // doesn't start any decompositions. (Analysis is done
+ // on the NFD form - see above).
+ for (; i < source.length(); i += UTF16_CHAR_LENGTH(cp)) {
+ cp = source.char32At(i);
+ if (unorm_isCanonSafeStart(cp)) {
+ source.extract(start, i-start, list[list_length++]); // add up to i
+ start = i;
+ }
+ }
+ source.extract(start, i-start, list[list_length++]); // add last one
+
+
+ // allocate the arrays, and find the strings that are CE to each segment
+ pieces = (UnicodeString **)uprv_malloc(list_length * sizeof(UnicodeString *));
+ pieces_length = list_length;
+ pieces_lengths = (int32_t*)uprv_malloc(list_length * sizeof(int32_t));
+ current = (int32_t*)uprv_malloc(list_length * sizeof(int32_t));
+ current_length = list_length;
+ if (pieces == NULL || pieces_lengths == NULL || current == NULL) {
+ status = U_MEMORY_ALLOCATION_ERROR;
+ goto CleanPartialInitialization;
+ }
+
+ for (i = 0; i < current_length; i++) {
+ current[i] = 0;
+ }
+ // for each segment, get all the combinations that can produce
+ // it after NFD normalization
+ for (i = 0; i < pieces_length; ++i) {
+ //if (PROGRESS) printf("SEGMENT\n");
+ pieces[i] = getEquivalents(list[i], pieces_lengths[i], status);
+ }
+
+ delete[] list;
+ return;
+// Common section to cleanup all local variables and reset object variables.
+CleanPartialInitialization:
+ if (list != NULL) {
+ delete[] list;
+ }
+ cleanPieces();
+}
+
+/**
+ * Dumb recursive implementation of permutation.
+ * TODO: optimize
+ * @param source the string to find permutations for
+ * @return the results in a set.
+ */
+void U_EXPORT2 CanonicalIterator::permute(UnicodeString &source, UBool skipZeros, Hashtable *result, UErrorCode &status) {
+ if(U_FAILURE(status)) {
+ return;
+ }
+ //if (PROGRESS) printf("Permute: %s\n", UToS(Tr(source)));
+ int32_t i = 0;
+
+ // optimization:
+ // 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;
+ }
+
+ // otherwise iterate through the string, and recursively permute all the other characters
+ UChar32 cp;
+ Hashtable subpermute(status);
+ if(U_FAILURE(status)) {
+ return;
+ }
+ subpermute.setValueDeleter(uhash_deleteUnicodeString);
+
+ for (i = 0; i < source.length(); i += UTF16_CHAR_LENGTH(cp)) {
+ cp = source.char32At(i);
+ const UHashElement *ne = NULL;
+ int32_t el = -1;
+ UnicodeString subPermuteString = source;
+
+ // optimization:
+ // if the character is canonical combining class zero,
+ // don't permute it
+ if (skipZeros && i != 0 && u_getCombiningClass(cp) == 0) {
+ //System.out.println("Skipping " + Utility.hex(UTF16.valueOf(source, i)));
+ continue;
+ }
+
+ 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);
+ /* Test for buffer overflows */
+ if(U_FAILURE(status)) {
+ 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);
+ 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;
+ 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);
+ }
+ }
+ //return result;
+}
+
+// privates
+
+// 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) {
+ Hashtable result(status);
+ Hashtable permutations(status);
+ Hashtable basic(status);
+ if (U_FAILURE(status)) {
+ return 0;
+ }
+ result.setValueDeleter(uhash_deleteUnicodeString);
+ permutations.setValueDeleter(uhash_deleteUnicodeString);
+ basic.setValueDeleter(uhash_deleteUnicodeString);
+
+ UChar USeg[256];
+ int32_t segLen = segment.extract(USeg, 256, 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.
+
+ const UHashElement *ne = NULL;
+ int32_t el = -1;
+ //Iterator it = basic.iterator();
+ 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);
+ const UHashElement *ne2 = NULL;
+ int32_t el2 = -1;
+ //Iterator it2 = permutations.iterator();
+ ne2 = permutations.nextElement(el2);
+ //while (it2.hasNext())
+ while (ne2 != NULL) {
+ //String possible = (String) it2.next();
+ //UnicodeString *possible = new UnicodeString(*((UnicodeString *)(ne2->value.pointer)));
+ UnicodeString possible(*((UnicodeString *)(ne2->value.pointer)));
+ UnicodeString attempt;
+ Normalizer::normalize(possible, UNORM_NFD, 0, attempt, status);
+
+ // TODO: check if operator == is semanticaly the same as attempt.equals(segment)
+ 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);
+ } else {
+ //if (PROGRESS) printf("-Skipping Permutation: %s\n", UToS(Tr(*possible)));
+ }
+
+ ne2 = permutations.nextElement(el2);
+ }
+ ne = basic.nextElement(el);
+ }
+
+ /* Test for buffer overflows */
+ if(U_FAILURE(status)) {
+ 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];
+ 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);
+ while(ne != NULL) {
+ finalResult[result_len++] = *((UnicodeString *)(ne->value.pointer));
+ ne = result.nextElement(el);
+ }
+
+
+ return finalResult;
+}
+
+Hashtable *CanonicalIterator::getEquivalents2(Hashtable *fillinResult, const UChar *segment, int32_t segLen, UErrorCode &status) {
+
+ if (U_FAILURE(status)) {
+ return NULL;
+ }
+
+ //if (PROGRESS) printf("Adding: %s\n", UToS(Tr(segment)));
+
+ UnicodeString toPut(segment, segLen);
+
+ fillinResult->put(toPut, new UnicodeString(toPut), status);
+
+ USerializedSet starts;
+
+ // cycle through all the characters
+ UChar32 cp, end = 0;
+ int32_t i = 0, j;
+ for (i = 0; i < segLen; i += UTF16_CHAR_LENGTH(cp)) {
+ // 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;
+ }
+ // if so, see which decompositions match
+ for(j = 0, cp = end+1; cp <= end || uset_getSerializedRange(&starts, j++, &cp, &end); ++cp) {
+ 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;
+
+ int32_t el = -1;
+ 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;
+ return NULL;
+ }
+ *toAdd += item;
+ fillinResult->put(*toAdd, toAdd, status);
+
+ //if (PROGRESS) printf("Adding: %s\n", UToS(Tr(*toAdd)));
+
+ ne = remainder.nextElement(el);
+ }
+ }
+ }
+
+ /* Test for buffer overflows */
+ if(U_FAILURE(status)) {
+ return NULL;
+ }
+ return fillinResult;
+}
+
+/**
+ * See if the decomposition of cp2 is at segment starting at segmentPos
+ * (with canonical rearrangment!)
+ * If so, take the remainder, and return the equivalents
+ */
+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];
+
+ int32_t inputLen = 0, decompLen;
+ UChar stackBuffer[4];
+ const UChar *decomp;
+
+ U16_APPEND_UNSAFE(temp, inputLen, comp);
+ decomp = unorm_getCanonicalDecomposition(comp, stackBuffer, &decompLen);
+ if(decomp == NULL) {
+ /* copy temp */
+ stackBuffer[0] = temp[0];
+ if(inputLen > 1) {
+ stackBuffer[1] = temp[1];
+ }
+ decomp = stackBuffer;
+ decompLen = inputLen;
+ }
+
+ UChar *buff = temp+inputLen;
+
+ // See if it matches the start of segment (at segmentPos)
+ UBool ok = FALSE;
+ UChar32 cp;
+ int32_t decompPos = 0;
+ UChar32 decompCp;
+ UTF_NEXT_CHAR(decomp, decompPos, decompLen, decompCp);
+
+ int32_t i;
+ UBool overflow = FALSE;
+
+ i = segmentPos;
+ while(i < segLen) {
+ UTF_NEXT_CHAR(segment, i, segLen, cp);
+
+ if (cp == decompCp) { // if equal, eat another cp from decomp
+
+ //if (PROGRESS) printf(" matches: %s\n", UToS(Tr(UnicodeString(cp))));
+
+ if (decompPos == decompLen) { // done, have all decomp characters!
+ //u_strcat(buff+bufLen, segment+i);
+ uprv_memcpy(buff+bufLen, segment+i, (segLen-i)*sizeof(UChar));
+ bufLen+=segLen-i;
+
+ ok = TRUE;
+ break;
+ }
+ UTF_NEXT_CHAR(decomp, decompPos, decompLen, decompCp);
+ } else {
+ //if (PROGRESS) printf(" buffer: %s\n", UToS(Tr(UnicodeString(cp))));
+
+ // brute force approach
+
+ U16_APPEND(buff, bufLen, bufSize, cp, overflow);
+
+ if(overflow) {
+ /*
+ * ### TODO handle buffer overflow
+ * The buffer is large, but an overflow may still happen with
+ * unusual input (many combining marks?).
+ * Reallocate buffer and continue.
+ * markus 20020929
+ */
+
+ overflow = FALSE;
+ }
+
+ /* TODO: optimize
+ // since we know that the classes are monotonically increasing, after zero
+ // e.g. 0 5 7 9 0 3
+ // we can do an optimization
+ // there are only a few cases that work: zero, less, same, greater
+ // if both classes are the same, we fail
+ // if the decomp class < the segment class, we fail
+
+ segClass = getClass(cp);
+ if (decompClass <= segClass) return null;
+ */
+ }
+ }
+ if (!ok)
+ return NULL; // we failed, characters left over
+
+ //if (PROGRESS) printf("Matches\n");
+
+ if (bufLen == 0) {
+ fillinResult->put(UnicodeString(), new UnicodeString(), status);
+ return fillinResult; // succeed, but no remainder
+ }
+
+ // brute force approach
+ // check to make sure result is canonically equivalent
+ int32_t tempLen = inputLen + bufLen;
+
+ UChar trial[bufSize];
+ unorm_decompose(trial, bufSize, temp, tempLen, FALSE, 0, &status);
+
+ if(U_FAILURE(status)
+ || uprv_memcmp(segment+segmentPos, trial, (segLen - segmentPos)*sizeof(UChar)) != 0)
+ {
+ return NULL;
+ }
+
+ return getEquivalents2(fillinResult, buff, bufLen, status);
+}
+
+U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_NORMALIZATION */
diff --git a/source/common/chariter.cpp b/source/common/chariter.cpp
new file mode 100644
index 0000000..a598bd6
--- /dev/null
+++ b/source/common/chariter.cpp
@@ -0,0 +1,96 @@
+/*
+**********************************************************************
+* Copyright (C) 1999-2004, International Business Machines
+* Corporation and others. All Rights Reserved.
+**********************************************************************
+*/
+
+#include "unicode/chariter.h"
+
+U_NAMESPACE_BEGIN
+
+ForwardCharacterIterator::~ForwardCharacterIterator() {}
+ForwardCharacterIterator::ForwardCharacterIterator()
+: UObject()
+{}
+ForwardCharacterIterator::ForwardCharacterIterator(const ForwardCharacterIterator &other)
+: UObject(other)
+{}
+
+
+CharacterIterator::CharacterIterator()
+: textLength(0), pos(0), begin(0), end(0) {
+}
+
+CharacterIterator::CharacterIterator(int32_t length)
+: textLength(length), pos(0), begin(0), end(length) {
+ if(textLength < 0) {
+ textLength = end = 0;
+ }
+}
+
+CharacterIterator::CharacterIterator(int32_t length, int32_t position)
+: textLength(length), pos(position), begin(0), end(length) {
+ if(textLength < 0) {
+ textLength = end = 0;
+ }
+ if(pos < 0) {
+ pos = 0;
+ } else if(pos > end) {
+ pos = end;
+ }
+}
+
+CharacterIterator::CharacterIterator(int32_t length, int32_t textBegin, int32_t textEnd, int32_t position)
+: textLength(length), pos(position), begin(textBegin), end(textEnd) {
+ if(textLength < 0) {
+ textLength = 0;
+ }
+ if(begin < 0) {
+ begin = 0;
+ } else if(begin > textLength) {
+ begin = textLength;
+ }
+ if(end < begin) {
+ end = begin;
+ } else if(end > textLength) {
+ end = textLength;
+ }
+ if(pos < begin) {
+ pos = begin;
+ } else if(pos > end) {
+ pos = end;
+ }
+}
+
+CharacterIterator::CharacterIterator(const CharacterIterator &that) :
+ForwardCharacterIterator(that),
+textLength(that.textLength), pos(that.pos), begin(that.begin), end(that.end)
+{
+}
+
+CharacterIterator &
+CharacterIterator::operator=(const CharacterIterator &that) {
+ ForwardCharacterIterator::operator=(that);
+ textLength = that.textLength;
+ pos = that.pos;
+ begin = that.begin;
+ end = that.end;
+ return *this;
+}
+
+// implementing first[32]PostInc() directly in a subclass should be faster
+// but these implementations make subclassing a little easier
+UChar
+CharacterIterator::firstPostInc(void) {
+ setToStart();
+ return nextPostInc();
+}
+
+UChar32
+CharacterIterator::first32PostInc(void) {
+ setToStart();
+ return next32PostInc();
+}
+
+U_NAMESPACE_END
diff --git a/source/common/charstr.h b/source/common/charstr.h
new file mode 100644
index 0000000..3bb11cb
--- /dev/null
+++ b/source/common/charstr.h
@@ -0,0 +1,88 @@
+/*
+**********************************************************************
+* Copyright (c) 2001-2004, International Business Machines
+* Corporation and others. All Rights Reserved.
+**********************************************************************
+* Date Name Description
+* 11/19/2001 aliu Creation.
+**********************************************************************
+*/
+
+#ifndef CHARSTRING_H
+#define CHARSTRING_H
+
+#include "unicode/utypes.h"
+#include "unicode/uobject.h"
+#include "unicode/unistr.h"
+#include "cmemory.h"
+
+//--------------------------------------------------------------------
+// class CharString
+//
+// This is a tiny wrapper class that is used internally to make a
+// UnicodeString look like a const char*. It can be allocated on the
+// stack. It only creates a heap buffer if it needs to.
+//--------------------------------------------------------------------
+
+U_NAMESPACE_BEGIN
+
+class U_COMMON_API CharString : public UMemory {
+public:
+
+#if !UCONFIG_NO_CONVERSION
+ // Constructor
+ // @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);
+#endif
+
+ inline CharString(const UnicodeString& str);
+ inline ~CharString();
+ inline operator const char*() const { return ptr; }
+
+private:
+ char buf[128];
+ char* ptr;
+
+ CharString(const CharString &other); // forbid copying of this class
+ CharString &operator=(const CharString &other); // forbid copying of this class
+};
+
+#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;
+ len = str.extract(0, 0x7FFFFFFF, buf ,sizeof(buf)-1, codepage);
+ if (len >= (int32_t)(sizeof(buf)-1)) {
+ ptr = (char *)uprv_malloc(len+1);
+ str.extract(0, 0x7FFFFFFF, ptr, len+1, codepage);
+ }
+}*/
+
+#endif
+
+inline CharString::CharString(const UnicodeString& str) {
+ int32_t len;
+ ptr = buf;
+ len = str.extract(0, 0x7FFFFFFF, buf, (int32_t)(sizeof(buf)-1), US_INV);
+ if (len >= (int32_t)(sizeof(buf)-1)) {
+ ptr = (char *)uprv_malloc(len+1);
+ str.extract(0, 0x7FFFFFFF, ptr, len+1, US_INV);
+ }
+}
+
+inline CharString::~CharString() {
+ if (ptr != buf) {
+ uprv_free(ptr);
+ }
+}
+
+U_NAMESPACE_END
+
+#endif
+//eof
diff --git a/source/common/cmemory.c b/source/common/cmemory.c
new file mode 100644
index 0000000..0f93f36
--- /dev/null
+++ b/source/common/cmemory.c
@@ -0,0 +1,124 @@
+/*
+******************************************************************************
+*
+* Copyright (C) 2002-2003, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+*
+* File cmemory.c ICU Heap allocation.
+* All ICU heap allocation, both for C and C++ new of ICU
+* class types, comes through these functions.
+*
+* If you have a need to replace ICU allocation, this is the
+* place to do it.
+*
+* Note that uprv_malloc(0) returns a non-NULL pointer, and
+* that a subsequent free of that pointer value is a NOP.
+*
+******************************************************************************
+*/
+#include "unicode/uclean.h"
+#include "cmemory.h"
+#include <stdlib.h>
+
+/* uprv_malloc(0) returns a pointer to this read-only data. */
+static const int32_t zeroMem[] = {0, 0, 0, 0, 0, 0};
+
+/* Function Pointers for user-supplied heap functions */
+static const void *pContext;
+static UMemAllocFn *pAlloc;
+static UMemReallocFn *pRealloc;
+static UMemFreeFn *pFree;
+
+/* Flag indicating whether any heap allocations have happened.
+ * Used to prevent changing out the heap functions after allocations have been made */
+static UBool gHeapInUse;
+
+U_CAPI void * U_EXPORT2
+uprv_malloc(size_t s) {
+ if (s > 0) {
+ gHeapInUse = TRUE;
+ if (pAlloc) {
+ return (*pAlloc)(pContext, s);
+ } else {
+ return malloc(s);
+ }
+ } else {
+ return (void *)zeroMem;
+ }
+}
+
+U_CAPI void * U_EXPORT2
+uprv_realloc(void * buffer, size_t size) {
+ if (buffer == zeroMem) {
+ return uprv_malloc(size);
+ } else if (size == 0) {
+ if (pFree) {
+ (*pFree)(pContext, buffer);
+ } else {
+ free(buffer);
+ }
+ return (void *)zeroMem;
+ } else {
+ gHeapInUse = TRUE;
+ if (pRealloc) {
+ return (*pRealloc)(pContext, buffer, size);
+ } else {
+ return realloc(buffer, size);
+ }
+ }
+}
+
+U_CAPI void U_EXPORT2
+uprv_free(void *buffer) {
+ if (buffer != zeroMem) {
+ if (pFree) {
+ (*pFree)(pContext, buffer);
+ } else {
+ free(buffer);
+ }
+ }
+}
+
+U_CAPI void U_EXPORT2
+u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f, UErrorCode *status)
+{
+ if (U_FAILURE(*status)) {
+ return;
+ }
+ if (a==NULL || r==NULL || f==NULL) {
+ *status = U_ILLEGAL_ARGUMENT_ERROR;
+ return;
+ }
+ if (gHeapInUse) {
+ *status = U_INVALID_STATE_ERROR;
+ return;
+ }
+ pContext = context;
+ pAlloc = a;
+ pRealloc = r;
+ pFree = f;
+}
+
+
+U_CFUNC UBool cmemory_cleanup(void) {
+ pContext = NULL;
+ pAlloc = NULL;
+ pRealloc = NULL;
+ pFree = NULL;
+ gHeapInUse = FALSE;
+ return TRUE;
+}
+
+
+/*
+ * gHeapInUse
+ * Return True if ICU has allocated any memory.
+ * Used by u_SetMutexFunctions() and similar to verify that ICU has not
+ * been used, that it is in a pristine initial state.
+ */
+U_CFUNC UBool cmemory_inUse() {
+ return gHeapInUse;
+}
+
diff --git a/source/common/cmemory.h b/source/common/cmemory.h
new file mode 100644
index 0000000..4bce193
--- /dev/null
+++ b/source/common/cmemory.h
@@ -0,0 +1,94 @@
+/*
+******************************************************************************
+*
+* Copyright (C) 1997-2008, International Business Machines
+* Corporation and others. All Rights Reserved.
+*
+******************************************************************************
+*
+* File CMEMORY.H
+*
+* Contains stdlib.h/string.h memory functions
+*
+* @author Bertrand A. Damiba
+*
+* Modification History:
+*
+* Date Name Description
+* 6/20/98 Bertrand Created.
+* 05/03/99 stephen Changed from functions to macros.
+*
+******************************************************************************
+*/
+
+#ifndef CMEMORY_H
+#define CMEMORY_H
+
+#include "unicode/utypes.h"
+#include <stddef.h>
+#include <string.h>
+
+
+#define uprv_memcpy(dst, src, size) U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size)
+#define uprv_memmove(dst, src, size) U_STANDARD_CPP_NAMESPACE memmove(dst, src, size)
+#define uprv_memset(buffer, mark, size) U_STANDARD_CPP_NAMESPACE memset(buffer, mark, size)
+#define uprv_memcmp(buffer1, buffer2, size) U_STANDARD_CPP_NAMESPACE memcmp(buffer1, buffer2,size)
+
+U_CAPI void * U_EXPORT2
+uprv_malloc(size_t s);
+
+U_CAPI void * U_EXPORT2
+uprv_realloc(void *mem, size_t size);
+
+U_CAPI void U_EXPORT2
+uprv_free(void *mem);
+
+/**
+ * This should align the memory properly on any machine.
+ * This is very useful for the safeClone functions.
+ */
+typedef union {
+ long t1;
+ double t2;
+ void *t3;
+} UAlignedMemory;
+
+/**
+ * Get the least significant bits of a pointer (a memory address).
+ * For example, with a mask of 3, the macro gets the 2 least significant bits,
+ * which will be 0 if the pointer is 32-bit (4-byte) aligned.
+ *
+ * ptrdiff_t is the most appropriate integer type to cast to.
+ * size_t should work too, since on most (or all?) platforms it has the same
+ * width as ptrdiff_t.
+ */
+#define U_POINTER_MASK_LSB(ptr, mask) (((ptrdiff_t)(char *)(ptr)) & (mask))
+
+/**
+ * Get the amount of bytes that a pointer is off by from
+ * the previous UAlignedMemory-aligned pointer.
+ */
+#define U_ALIGNMENT_OFFSET(ptr) U_POINTER_MASK_LSB(ptr, sizeof(UAlignedMemory) - 1)
+
+/**
+ * Get the amount of bytes to add to a pointer
+ * in order to get the next UAlignedMemory-aligned address.
+ */
+#define U_ALIGNMENT_OFFSET_UP(ptr) (sizeof(UAlignedMemory) - U_ALIGNMENT_OFFSET(ptr))
+
+/**
+ * Indicate whether the ICU allocation functions have been used.
+ * This is used to determine whether ICU is in an initial, unused state.
+ */
+U_CFUNC UBool
+cmemory_inUse(void);
+
+/**
+ * Heap clean up function, called from u_cleanup()
+ * Clears any user heap functions from u_setMemoryFunctions()
+ * Does NOT deallocate any remaining allocated memory.
+ */
+U_CFUNC UBool
+cmemory_cleanup(void);
+
+#endif
diff --git a/source/common/common.rc b/source/common/common.rc
new file mode 100644
index 0000000..2217b03
--- /dev/null
+++ b/source/common/common.rc
@@ -0,0 +1,108 @@
+// 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-2007 International Business Machines
+// Corporation and others. All Rights Reserved.
+//
+#include "msvcres.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winresrc.h>
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+//
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "msvcres.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include <winresrc.h>\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+#define STR(s) #s
+#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, 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
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "00000000"
+ BEGIN
+ 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, U_ICU_VERSION_BUILDLEVEL_NUM)
+ VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0"
+#ifdef _DEBUG
+ VALUE "OriginalFilename", "icuuc" U_ICU_VERSION_SHORT "d.dll\0")
+#else
+ VALUE "OriginalFilename", "icuuc" U_ICU_VERSION_SHORT ".dll\0")
+#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, U_ICU_VERSION_BUILDLEVEL_NUM)
+ VALUE "SpecialBuild", "\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x000, 0000
+ END
+END
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/source/common/common.vcproj b/source/common/common.vcproj
new file mode 100644
index 0000000..3ef8763
--- /dev/null
+++ b/source/common/common.vcproj
@@ -0,0 +1,4248 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="common"
+ ProjectGUID="{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\..\..\lib"
+ IntermediateDirectory=".\x86\Release"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\..\..\lib\icuuc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ PrecompiledHeaderFile=".\x86\Release/common.pch"
+ AssemblerListingLocation=".\x86\Release/"
+ ObjectFile=".\x86\Release/"
+ ProgramDataBaseFileName=".\x86\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="..\..\bin\icuuc41.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ ProgramDatabaseFile=".\..\..\lib\icuuc.pdb"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x4a800000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="..\..\lib\icuuc.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\..\..\lib"
+ IntermediateDirectory=".\x86\Debug"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\..\..\lib\icuucd.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;RBBI_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ PrecompiledHeaderFile=".\x86\Debug/common.pch"
+ AssemblerListingLocation=".\x86\Debug/"
+ ObjectFile=".\x86\Debug/"
+ ProgramDataBaseFileName=".\x86\Debug/"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="..\..\bin\icuuc41d.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\..\..\lib\icuucd.pdb"
+ BaseAddress="0x4a800000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="..\..\lib\icuucd.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ UseFAT32Workaround="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory=".\x64\Release"
+ IntermediateDirectory=".\x64\Release"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\..\..\lib64\icuuc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN64;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ PrecompiledHeaderFile=".\x64\Release/common.pch"
+ AssemblerListingLocation=".\x64\Release/"
+ ObjectFile=".\x64\Release/"
+ ProgramDataBaseFileName=".\x64\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="..\..\bin64\icuuc41.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ ProgramDatabaseFile=".\..\..\lib64\icuuc.pdb"
+ EnableCOMDATFolding="2"
+ BaseAddress="0x4a800000"
+ ImportLibrary="..\..\lib64\icuuc.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory=".\x64\Debug"
+ IntermediateDirectory=".\x64\Debug"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\..\..\lib64\icuucd.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN64;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_COMMON_IMPLEMENTATION;RBBI_DEBUG"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ PrecompiledHeaderFile=".\x64\Debug/common.pch"
+ AssemblerListingLocation=".\x64\Debug/"
+ ObjectFile=".\x64\Debug/"
+ ProgramDataBaseFileName=".\x64\Debug/"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="..\..\bin64\icuuc41d.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\..\..\lib64\icuucd.pdb"
+ BaseAddress="0x4a800000"
+ ImportLibrary="..\..\lib64\icuucd.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ UseFAT32Workaround="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="bidi"
+ >
+ <File
+ RelativePath=".\ubidi.c"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\ubidi.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\ubidi_props.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ubidi_props.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ubidiimp.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ubidiln.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ubidiwrt.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ushape.c"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\ushape.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="break iteration"
+ >
+ <File
+ RelativePath=".\brkeng.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\brkeng.h"
+ >
+ </File>
+ <File
+ RelativePath=".\brkiter.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\brkiter.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\unicode\dbbi.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\dictbe.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\dictbe.h"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbi.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\rbbi.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\rbbidata.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbidata.h"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbinode.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbinode.h"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbirb.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbirb.h"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbirpt.h"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbiscan.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbiscan.h"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbisetb.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbisetb.h"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbistbl.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbitblb.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\rbbitblb.h"
+ >
+ </File>
+ <File
+ RelativePath=".\triedict.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\triedict.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ubrk.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\ubrk.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\ubrkimpl.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="collation"
+ >
+ <File
+ RelativePath=".\ucol_swp.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\i18n"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\i18n"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\i18n"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\i18n"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\ucol_swp.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="collections"
+ >
+ <File
+ RelativePath=".\hash.h"
+ >
+ </File>
+ <File
+ RelativePath=".\propsvec.c"
+ >
+ </File>
+ <File
+ RelativePath=".\propsvec.h"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\strenum.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\uarrsort.c"
+ >
+ </File>
+ <File
+ RelativePath=".\uarrsort.h"
+ >
+ </File>
+ <File
+ RelativePath=".\uenum.c"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\uenum.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\uenumimp.h"
+ >
+ </File>
+ <File
+ RelativePath=".\uhash.c"
+ >
+ </File>
+ <File
+ RelativePath=".\uhash.h"
+ >
+ </File>
+ <File
+ RelativePath=".\uhash_us.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\ulist.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ulist.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ustack.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\ustrenum.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\ustrenum.h"
+ >
+ </File>
+ <File
+ RelativePath=".\utrie.c"
+ >
+ </File>
+ <File
+ RelativePath=".\utrie.h"
+ >
+ </File>
+ <File
+ RelativePath=".\utrie2.c"
+ >
+ </File>
+ <File
+ RelativePath=".\utrie2.h"
+ >
+ </File>
+ <File
+ RelativePath=".\utrie2_builder.c"
+ >
+ </File>
+ <File
+ RelativePath=".\utrie2_impl.h"
+ >
+ </File>
+ <File
+ RelativePath=".\uvector.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\uvector.h"
+ >
+ </File>
+ <File
+ RelativePath=".\uvectr32.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\uvectr32.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="configuration"
+ >
+ <File
+ RelativePath=".\common.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\cpputils.h"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\docmain.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\errorcode.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\unicode\errorcode.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>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\locmap.c"
+ >
+ </File>
+ <File
+ RelativePath=".\locmap.h"
+ >
+ </File>
+ <File
+ RelativePath=".\mutex.h"
+ >
+ </File>
+ <File
+ RelativePath=".\putil.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableLanguageExtensions="false"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\unicode\putil.h"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="copy "$(InputPath)" ..\..\include\unicode
"
+ Outputs="..\..\include\unicode\$(InputFileName)"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >