﻿* Copyright (C) 2004-2011, International Business Machines
* Corporation and others.  All Rights Reserved.
*
*   file name:  changes.txt
*   encoding:   US-ASCII
*   tab size:   8 (not used)
*   indentation:4
*
*   created on: 2004may06
*   created by: Markus W. Scherer
*
* change log for Unicode updates

---------------------------------------------------------------------------- ***

Unicode 6.1 update

*** ICU Trac

- ticket 8995 final update to Unicode 6.1
- ticket 8994 regenerate source/layout/CanonData.cpp

- ticket 8961 support Unicode "Age" value *names*
- ticket 8963 support multiple character name aliases & types

- ticket 8827 "update ICU to Unicode 6.1"
- C++ branches/markus/uni61 at r30864 from trunk at r30843
- Java branches/markus/uni61 at r30865 from trunk at r30863

*** Unicode version numbers
- makedata.mak
- uchar.h
  (configure.in & configure: have been modified to extract the version from uchar.h)
- com.ibm.icu.util.VersionInfo
- icutools/unicode/makedefs.sh
  + also review & update other definitions in that file,
    e.g. the ICU version in this path: BLD_DATA_FILES=$ICU_BLD/data/out/build/icudt49l

*** data files & enums & parser code

* file preparation

~/svn.icu/tools/trunk/src/unicode/c/genprops/misc$ ./ucdcopy.py ~/uni61/20111205/ucd ~/uni61/processed
- This prepares both unidata and testdata files in respective output subfolders.
- Check test file diffs for previously commented-out, known-failing data lines;
  probably need to keep those commented out.

* PropertyValueAliases.txt changes
- 11 new block names:
  Arabic_Extended_A
  Arabic_Mathematical_Alphabetic_Symbols
  Chakma
  Meetei_Mayek_Extensions
  Meroitic_Cursive
  Meroitic_Hieroglyphs
  Miao
  Sharada
  Sora_Sompeng
  Sundanese_Supplement
  Takri
  -> add to uchar.h
  -> add to UCharacter.UnicodeBlock IDs
    Eclipse find     UBLOCK_([^ ]+) = ([0-9]+), (/.+)
            replace  public static final int \1_ID = \2; \3
  -> add to UCharacter.UnicodeBlock objects
    Eclipse find     UBLOCK_([^ ]+) = [0-9]+, (/.+)
            replace  public static final UnicodeBlock \1 = new UnicodeBlock("\1", \1_ID); \2
- 1 new Joining_Group (jg) value:
  Rohingya_Yeh
  -> uchar.h & UCharacter.JoiningGroup
- 2 new Line_Break (lb) values:
  CJ=Conditional_Japanese_Starter
  HL=Hebrew_Letter
  -> uchar.h & UCharacter.LineBreak
- 7 new scripts:
  sc ; Cakm      ; Chakma
  sc ; Merc      ; Meroitic_Cursive
  sc ; Mero      ; Meroitic_Hieroglyphs
  sc ; Plrd      ; Miao
  sc ; Shrd      ; Sharada
  sc ; Sora      ; Sora_Sompeng
  sc ; Takr      ; Takri
  -> remove these from SyntheticPropertyValueAliases.txt
  -> fix expectedLong names in cucdapi.c/TestUScriptCodeAPI()
      and in com.ibm.icu.dev.test.lang.TestUScript.java
- 2 new script codes from ISO 15924 http://www.unicode.org/iso15924/codechanges.html
  (added 2011-06-21)
  Khoj        322     Khojki
  Tirh        326     Tirhuta
  -> uscript.h
  -> com.ibm.icu.lang.UScript
    find     USCRIPT_([^ ]+) *= ([0-9]+),(.+)
    replace  public static final int \1 = \2;\3
  -> SyntheticPropertyValueAliases.txt
  -> add to expectedLong and expectedShort names in cintltst/cucdapi.c/TestUScriptCodeAPI()
      and in com.ibm.icu.dev.test.lang.TestUScript.java

* UnicodeData.txt changes
- the last Unihan code point changes from U+9FCB to U+9FCC
  search for both 9FCB (end) and 9FCC (limit) (regex 9FC[BC], case-insensitive)
  + do change gennames.c
  + do change swapCJK() in ucol.cpp & ImplicitCEGenerator.java

* DerivedBidiClass.txt changes
- 2 new default-AL blocks:
#     Arabic Extended-A: U+08A0  -  U+08FF  (was default-R)
#     Arabic Mathematical Alphabetic Symbols:
#                       U+1EE00  - U+1EEFF  (was default-R)
- 2 new default-R blocks:
#     Meroitic Hieroglyphs:
#                        U+10980 - U+1099F
#     Meroitic Cursive:  U+109A0 - U+109FF
  -> should be picked up by the explicit data in the file

* NameAliases.txt changes
- from
    # Each line has two fields
    # First field: Code point
    # Second field: Alias
- to
    # Each line has three fields, as described here:
    #
    # First field:  Code point
    # Second field: Alias
    # Third field:  Type
- Also, the file previously allowed multiple aliases but only now does it
  actually provide multiple, even multiple of the same type. For example,
    FEFF;BYTE ORDER MARK;alternate
    FEFF;BOM;abbreviation
    FEFF;ZWNBSP;abbreviation
- This breaks our gennames parser, unames.icu data structure, and API.
  Fix gennames to only pick up "correction" aliases.
  New ticket #8963 for further changes.

* run genpname/preparse.pl (on Linux)
  + cd ~/svn.icu/tools/trunk/src/unicode/c/genpname
  + make sure that data.h is writable
  + perl preparse.pl ~/svn.icu/trunk/src > out.txt
  + preparse.pl shows no errors, out.txt Info and Warning lines look ok

* build ICU (make install)
  so that the tools build can pick up the new definitions from the installed header files.
* build Unicode tools (at least genpname) using CMake+make

* run genpname
  (builds both pnames.icu and propname_data.h)
- ~/svn.icu/tools/trunk/bld/unicode/c$ genpname/genpname -v -d ~/svn.icu/trunk/src/source/data/in
- ~/svn.icu/tools/trunk/bld/unicode/c$ genpname/genpname -v -d ~/svn.icu/trunk/src/source/common --csource

* build ICU (make install)
* build Unicode tools using CMake+make

* update source/data/unidata/norm2/nfkc_cf.txt
- follow the instructions in nfkc_cf.txt for updating it from DerivedNormalizationProps.txt

* update source/data/unidata/norm2/uts46.txt
- download http://www.unicode.org/Public/idna/6.1.0/IdnaMappingTable.txt
  to ~/svn.icu/tools/trunk/src/unicode/py
- adjust idna2nrm.py to remove "; NV8": For UTS #46, we do not care about "not valid in IDNA2008".
- ~/svn.icu/tools/trunk/src/unicode/py$ ./idna2nrm.py
- ~/svn.icu/tools/trunk/src/unicode/py$ cp uts46.txt ~/svn.icu/trunk/src/source/data/unidata/norm2

* update uts46test.cpp and UTS46Test.java if there are new characters that are equivalent to
  sequences with non-LDH ASCII (that is, their decompositions contain '=' or similar)
- grep IdnaMappingTable.txt or uts46.txt for "disallowed_STD3_valid" on non-ASCII characters
- Unicode 6.0..6.1: U+2260, U+226E, U+226F
- nothing new in 6.1, no test file to update

* generate core properties data files
- in initial bootstrapping, change the UCA version
  in source/data/unidata/FractionalUCA.txt to match the new Unicode version
- ~/svn.icu/tools/trunk/src/unicode$ ./makeprops.sh ~/svn.icu/trunk/src ~/svn.icu/trunk/bld
- rebuild ICU & tools
  + if genrb fails to build coll/root.res with an U_INVALID_FORMAT_ERROR,
    check if the UCA version in FractionalUCA.txt matches the new Unicode version
    (see step above)
- run makeuca.sh so that genuca picks up the new case mappings and nfc.nrm:
  ~/svn.icu/tools/trunk/src/unicode$ ./makeuca.sh ~/svn.icu/trunk/src ~/svn.icu/trunk/bld
- rebuild ICU & tools

* update Java data files
- refresh just the UCD-related files, just to be safe
- see (ICU4C)/source/data/icu4j-readme.txt
- mkdir /tmp/icu4j
- ~/svn.icu/trunk/bld$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
  output:
    ...
    Unicode .icu files built to ./out/build/icudt49l
    mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt49b
    mkdir -p ./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt49b
    echo pnames.icu ubidi.icu ucase.icu uprops.icu > ./out/icu4j/add.txt
    LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH  ../bin/icupkg ./out/tmp/icudt49l.dat ./out/icu4j/icudt49b.dat -a ./out/icu4j/add.txt -s ./out/build/icudt49l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt49b
    mv ./out/icu4j/"com/ibm/icu/impl/data/icudt49b/zoneinfo64.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt49b/metaZones.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt49b/timezoneTypes.res" ./out/icu4j/"com/ibm/icu/impl/data/icudt49b/windowsZones.res" "./out/icu4j/tzdata/com/ibm/icu/impl/data/icudt49b"
    jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt49b/
    mkdir -p /tmp/icu4j/main/shared/data
    cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data
    jar cf ./out/icu4j/icutzdata.jar -C ./out/icu4j/tzdata com/ibm/icu/impl/data/icudt49b/
    mkdir -p /tmp/icu4j/main/shared/data
    cp ./out/icu4j/icutzdata.jar /tmp/icu4j/main/shared/data
    make[1]: Leaving directory `/home/mscherer/svn.icu/trunk/bld/data'
- copy the big-endian Unicode data files to another location,
  separate from the other data files
    mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/icudt49b/coll
    mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/icudt49b/brkitr
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt49b/*.icu /tmp/icu4j/com/ibm/icu/impl/data/icudt49b
    ~/svn.icu/trunk/bld/data/out/icu4j$ rm /tmp/icu4j/com/ibm/icu/impl/data/icudt49b/cnvalias.icu
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt49b/*.nrm /tmp/icu4j/com/ibm/icu/impl/data/icudt49b
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt49b/coll/*.icu /tmp/icu4j/com/ibm/icu/impl/data/icudt49b/coll
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt49b/brkitr/* /tmp/icu4j/com/ibm/icu/impl/data/icudt49b/brkitr
- refresh ICU4J
    ~/svn.icu/trunk/bld/data/out/icu4j$ jar uf ~/svn.icu4j/trunk/src/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/icudt49b

* refresh Java test .txt files
- copy new .txt files into ICU4J's main/tests/core/src/com/ibm/icu/dev/data/unicode

* test ICU so far, fix test code where necessary
- temporarily ignore collation issues that look like UCA/UCD mismatches,
  until UCA data is updated

* UCA

- get output from Mark's tools; look in
    http://www.unicode.org/Public/UCA/6.1.0/
- update source/data/unidata/FractionalUCA.txt with FractionalUCA_SHORT.txt
- update source/data/unidata/UCARules.txt with UCA_Rules_SHORT.txt
  (note removing the underscore before "Rules")
- update (ICU)/source/test/testdata/CollationTest_*.txt
  and (ICU4J)/main/tests/collate/src/com/ibm/icu/dev/data/CollationTest_*.txt
  with output from Mark's Unicode tools
- check test file diffs for previously commented-out, known-failing data lines;
  probably need to keep those commented out
- check FractionalUCA.txt for manual changes of lead bytes from IMPLICIT to Hani
- run makeuca.sh:
  ~/svn.icu/tools/trunk/src/unicode$ ./makeuca.sh ~/svn.icu/trunk/src ~/svn.icu/trunk/bld
- rebuild ICU4C
- refresh ICU4J collation data:
  (subset of instructions above for properties data refresh, except copies all coll/*)
    ~/svn.icu/trunk/bld$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
    mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/icudt49b/coll
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt49b/coll/* /tmp/icu4j/com/ibm/icu/impl/data/icudt49b/coll
    ~/svn.icu/trunk/bld/data/out/icu4j$ jar uf ~/svn.icu4j/trunk/src/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/icudt49b
- run all tests with the *_SHORT.txt or the full files (the full ones have comments, useful for debugging)
- note on intltest: if collate/UCAConformanceTest fails, then
  utility/MultithreadTest/TestCollators will fail as well;
  fix the conformance test before looking into the multi-thread test

* When refreshing all of ICU4J data from ICU4C
- ~/svn.icu/trunk/bld$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
- cp /tmp/icu4j/main/shared/data/icudata.jar ~/svn.icu4j/trunk/src/main/shared/data
or
- ~/svn.icu/trunk/bld$ make ICU4J_ROOT=~/svn.icu4j/trunk/src icu4j-data-install

*** LayoutEngine script information

(For details see the Unicode 5.2 change log below.)

* Run icu4j-tools: com.ibm.icu.dev.tool.layout.ScriptNameBuilder.
  This generates LEScripts.h, LELanguages.h, ScriptAndLanguageTags.h and ScriptAndLanguageTags.cpp
  in the working directory.
  (It also generates ScriptRunData.cpp, which is no longer needed.)

  The generated files have a current copyright date and "@draft" statement.

- diff current <icu>/source/layout files vs. generated ones
    ~/svn.icu4j/trunk/src$ kdiff3 ~/svn.icu/trunk/src/source/layout tools/misc/src/com/ibm/icu/dev/tool/layout
  review and manually merge desired changes;
  fix gratuitous changes, incorrect @draft and missing aliases;
  Unicode-derived script codes should be "born stable" like constants in uchar.h, uscript.h etc.
- if you just copy the above files, then
  fix mixed line endings, review the diffs as above and restore changes to API tags etc.;
  manually re-add the "Indic script xyz v.2" tags in ScriptAndLanguageTags.h

*** merge the Unicode update branches back onto the trunk
- do not merge the icudata.jar and testdata.jar,
  instead rebuild them from merged & tested ICU4C

---------------------------------------------------------------------------- ***

ICU 4.8 (no Unicode update, just new script codes)

* 9 new script codes from ISO 15924 http://www.unicode.org/iso15924/codechanges.html
  (added 2010-12-21)
    Afak    439     Afaka
    Jurc    510     Jurchen
    Mroo    199     Mro, Mru
    Nshu    499     Nüshu
    Shrd    319     Sharada, Śāradā
    Sora    398     Sora Sompeng
    Takr    321     Takri, Ṭākrī, Ṭāṅkrī
    Tang    520     Tangut
    Wole    480     Woleai
  -> uscript.h
  -> com.ibm.icu.lang.UScript
    find     USCRIPT_([^ ]+) *= ([0-9]+),(.+)
    replace  public static final int \1 = \2;\3
  -> genpname/SyntheticPropertyValueAliases.txt
  -> add to expectedLong and expectedShort names in cintltst/cucdapi.c/TestUScriptCodeAPI()
      and in com.ibm.icu.dev.test.lang.TestUScript.java

* run genpname/preparse.pl (on Linux)
  + cd ~/svn.icu/tools/trunk/src/unicode/c/genpname
  + make sure that data.h is writable
  + perl preparse.pl ~/svn.icu/trunk/src > out.txt
  + preparse.pl shows no errors, out.txt Info and Warning lines look ok

* rebuild Unicode tools (at least genpname) using make
- You might first need to "make install" ICU so that the tools build can pick
  up the new definitions from the installed header files.

* run genpname
  (builds both pnames.icu and propname_data.h)
- ~/svn.icu/tools/trunk/bld/unicode/c$ genpname/genpname -v -d ~/svn.icu/trunk/src/source/data/in
- ~/svn.icu/tools/trunk/bld/unicode/c$ genpname/genpname -v -d ~/svn.icu/trunk/src/source/common --csource
- rebuild ICU & tools

* run genprops
- ~/svn.icu/tools/trunk/bld/unicode/c$ genprops/genprops -d ~/svn.icu/trunk/src/source/data/in -s ~/svn.icu/trunk/src/source/data/unidata -i ~/svn.icu/trunk/dbg/data/out/build/icudt48l -u 6.0
- ~/svn.icu/tools/trunk/bld/unicode/c$ genprops/genprops -d ~/svn.icu/trunk/src/source/common --csource -s ~/svn.icu/trunk/src/source/data/unidata -i ~/svn.icu/trunk/dbg/data/out/build/icudt48l -u 6.0
- rebuild ICU & tools

* update Java data files
- refresh just the UCD-related files, just to be safe
- see (ICU4C)/source/data/icu4j-readme.txt
- mkdir /tmp/icu4j
- ~/svn.icu/trunk/dbg$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
- copy the big-endian Unicode data files to another location,
  separate from the other data files
    mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/icudt48b
    ~/svn.icu/trunk/dbg/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt48b/pnames.icu /tmp/icu4j/com/ibm/icu/impl/data/icudt48b
    ~/svn.icu/trunk/dbg/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt48b/uprops.icu /tmp/icu4j/com/ibm/icu/impl/data/icudt48b
- refresh ICU4J
    ~/svn.icu/trunk/dbg/data/out/icu4j$ jar uf ~/svn.icu4j/trunk/src/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/icudt48b

* should have updated the layout engine script codes but forgot

---------------------------------------------------------------------------- ***

Unicode 6.0 update

*** related ICU Trac tickets

7264 Unicode 6.0 Update

*** Unicode version numbers
- makedata.mak
- uchar.h
  (configure.in & configure: have been modified to extract the version from uchar.h)
- com.ibm.icu.util.VersionInfo

*** data files & enums & parser code

* file preparation

~/svn.icu/tools/trunk/src/unicode/c/genprops/misc$ ./ucdcopy.py ~/uni60/20100720/ucd ~/uni60/processed
- This now prepares both unidata and testdata files in respective output subfolders.

* PropertyAliases.txt changes
- new Script_Extensions property defined in the new ScriptExtensions.txt file
  but not listed in PropertyAliases.txt; reported to unicode.org;
  -> added to tools/trunk/src/unicode/c/genpname/SyntheticPropertyAliases.txt
    scx; Script_Extensions
  -> uchar.h with new UProperty section
  -> com.ibm.icu.lang.UProperty, parallel with uchar.h

* PropertyValueAliases.txt changes
- 12 new block names:
  Alchemical_Symbols
  Bamum_Supplement
  Batak
  Brahmi
  CJK_Unified_Ideographs_Extension_D
  Emoticons
  Ethiopic_Extended_A
  Kana_Supplement
  Mandaic
  Miscellaneous_Symbols_And_Pictographs
  Playing_Cards
  Transport_And_Map_Symbols
  -> add to uchar.h
  -> add to UCharacter.UnicodeBlock
    Eclipse find     UBLOCK_([^ ]+) = [0-9]+, (/.+)
            replace  public static final UnicodeBlock \1 = new UnicodeBlock("\1", \1_ID); \2
- Joining_Group (jg) values:
  Teh_Marbuta_Goal becomes the new canonical value for the old Hamza_On_Heh_Goal which becomes an alias
  -> uchar.h & UCharacter.JoiningGroup
- 3 new scripts:
  sc ; Batk      ; Batak
  sc ; Brah      ; Brahmi
  sc ; Mand      ; Mandaic
  -> remove these from SyntheticPropertyValueAliases.txt
  -> add alias USCRIPT_MANDAIC to USCRIPT_MANDAEAN
  -> fix expectedLong names in cucdapi.c/TestUScriptCodeAPI()
      and in com.ibm.icu.dev.test.lang.TestUScript.java
- 13 new script codes from ISO 15924 http://www.unicode.org/iso15924/codechanges.html
  (added 2009-11-11..2010-07-18)
  Bass        259     Bassa Vah
  Dupl        755     Duployan shortand
  Elba        226     Elbasan
  Gran        343     Grantha
  Kpel        436     Kpelle
  Loma        437     Loma
  Mend        438     Mende
  Merc        101     Meroitic Cursive
  Narb        106     Old North Arabian
  Nbat        159     Nabataean
  Palm        126     Palmyrene
  Sind        318     Sindhi
  Wara        262     Warang Citi
  -> uscript.h
  -> com.ibm.icu.lang.UScript
    find     USCRIPT_([^ ]+) *= ([0-9]+),(.+)
    replace  public static final int \1 = \2;\3
  -> SyntheticPropertyValueAliases.txt
  -> add to expectedLong and expectedShort names in cintltst/cucdapi.c/TestUScriptCodeAPI()
      and in com.ibm.icu.dev.test.lang.TestUScript.java
- ISO 15924 name change
  Mero        100     Meroitic Hieroglyphs (was Meroitic)
  -> add new alias USCRIPT_MEROITIC_HIEROGLYPHS to USCRIPT_MEROITIC
- property value alias added for Cham, was already moved out of SyntheticPropertyValueAliases.txt

* UnicodeData.txt changes
- new CJK block:
  2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
  2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
  -> add to tools/trunk/src/unicode/c/gennames/gennames.c, with new ucdVersion

* build Unicode tools using CMake+make

* run genpname/preparse.pl (on Linux)
  + cd ~/svn.icu/tools/trunk/src/unicode/c/genpname
  + make sure that data.h is writable
  + perl preparse.pl ~/svn.icu/trunk/src > out.txt
  + preparse.pl shows no errors, out.txt Info and Warning lines look ok

* rebuild Unicode tools (at least genpname) using make
- You might first need to "make install" ICU so that the tools build can pick
  up the new definitions from the installed header files.

* run genpname
- ~/svn.icu/tools/trunk/bld/unicode$ c/genpname/genpname -v -d ~/svn.icu/trunk/src/source/data/in
- rebuild ICU & tools

* update source/data/unidata/norm2/nfkc_cf.txt
- follow the instructions in nfkc_cf.txt for updating it from DerivedNormalizationProps.txt

* update source/data/unidata/norm2/uts46.txt
- download http://www.unicode.org/Public/idna/6.0.0/IdnaMappingTable.txt
  to ~/svn.icu/tools/trunk/src/unicode/py
- adjust idna2nrm.py to handle new disallowed_STD3_valid and disallowed_STD3_mapped values
- ~/svn.icu/tools/trunk/src/unicode/py$ ./idna2nrm.py
- ~/svn.icu/tools/trunk/src/unicode/py$ cp uts46.txt ~/svn.icu/trunk/src/source/data/unidata/norm2

* update uts46test.cpp and UTS46Test.java if there are new characters that are equivalent to
  sequences with non-LDH ASCII (that is, their decompositions contain '=' or similar)
- grep IdnaMappingTable.txt or uts46.txt for "disallowed_STD3_valid" on non-ASCII characters
- Unicode 6.0: U+2260, U+226E, U+226F

* generate core properties data files
- ~/svn.icu/tools/trunk/src/unicode$ ./makeprops.sh ~/svn.icu/trunk/src ~/svn.icu/trunk/bld
- rebuild ICU & tools
- run makeuca.sh so that genuca picks up the new nfc.nrm:
  ~/svn.icu/tools/trunk/src/unicode$ ./makeuca.sh ~/svn.icu/trunk/src ~/svn.icu/trunk/bld
- rebuild ICU & tools

* implement new Script_Extensions property (provisional)
- parser & generator: genprops & uprops.icu
- uscript.h, uprops.h, uchar.c, uniset_props.cpp and others, plus cintltst/cucdapi.c & intltest/usettest.cpp
- UScript.java, UCharacterProperty.java, UnicodeSet.java, TestUScript.java, UnicodeSetTest.java

* switch ubidi.icu, ucase.icu and uprops.icu from UTrie to UTrie2
- (one-time change)
- genbidi/gencase/genprops tools changes
- re-run makeprops.sh (see above)
- UCharacterProperty.java, UCharacterTypeIterator.java,
  UBiDiProps.java, UCaseProps.java, and several others with minor changes;
  UCharacterPropertyReader.java deleted and its code folded into UCharacterProperty.java

* update Java data files
- refresh just the UCD-related files, just to be safe
- see (ICU4C)/source/data/icu4j-readme.txt
- mkdir /tmp/icu4j
- ~/svn.icu/trunk/bld$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
  output:
    ...
    Unicode .icu files built to ./out/build/icudt45l
    mkdir -p ./out/icu4j/com/ibm/icu/impl/data/icudt45b
    echo ubidi.icu ucase.icu uprops.icu > ./out/icu4j/add.txt
    LD_LIBRARY_PATH=../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH  ../bin/icupkg ./out/tmp/icudt45l.dat ./out/icu4j/icudt45b.dat -a ./out/icu4j/add.txt -s ./out/build/icudt45l -x '*' -tb -d ./out/icu4j/com/ibm/icu/impl/data/icudt45b
    jar cf ./out/icu4j/icudata.jar -C ./out/icu4j com/ibm/icu/impl/data/icudt45b
    mkdir -p /tmp/icu4j/main/shared/data
    cp ./out/icu4j/icudata.jar /tmp/icu4j/main/shared/data
- copy the big-endian Unicode data files to another location,
  separate from the other data files
    mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/icudt45b/coll
    mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/icudt45b/brkitr
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt45b/*.icu /tmp/icu4j/com/ibm/icu/impl/data/icudt45b
    ~/svn.icu/trunk/bld/data/out/icu4j$ rm /tmp/icu4j/com/ibm/icu/impl/data/icudt45b/cnvalias.icu
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt45b/*.nrm /tmp/icu4j/com/ibm/icu/impl/data/icudt45b
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt45b/coll/*.icu /tmp/icu4j/com/ibm/icu/impl/data/icudt45b/coll
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt45b/brkitr/* /tmp/icu4j/com/ibm/icu/impl/data/icudt45b/brkitr
- refresh ICU4J
    ~/svn.icu/trunk/bld/data/out/icu4j$ jar uf ~/svn.icu4j/trunk/src/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/icudt45b

* refresh Java test .txt files
- copy new .txt files into ICU4J's main/tests/core/src/com/ibm/icu/dev/data/unicode

* un-hardcode normalization skippable (NF*_Inert) test data
- removes one manual step from the Unicode upgrade, and removes dependency on one of Mark's tools

* copy updated break iterator test files
- now handled by early ucdcopy.py and
  copying the uni60/processed/testdata files to ~/svn.icu/trunk/src/source/test/testdata
  (old instructions:
   copy from (Unicode 6.0)/ucd/auxiliary/*BreakTest-6....txt
   to ~/svn.icu/trunk/src/source/test/testdata)
- they are not used in ICU4J

* UCA

- get output from Mark's tools; look in
    http://www.unicode.org/~book/incoming/mark/uca6.0.0/
    http://www.macchiato.com/unicode/utc/additional-uca-files
    http://www.unicode.org/Public/UCA/6.0.0/
    http://www.unicode.org/~mdavis/uca/
- update source/data/unidata/FractionalUCA.txt with FractionalUCA_SHORT.txt
- update source/data/unidata/UCARules.txt with UCA_Rules_SHORT.txt
- update Han-implicit ranges for new CJK extensions:
  swapCJK() in ucol.cpp & ImplicitCEGenerator.java
- genuca: allow bytes 02 for U+FFFE, new merge-sort character;
  do not add it into invuca so that tailoring primary-after an ignorable works
- genuca: permit space between [variable top] bytes
- ucol.cpp: treat noncharacters like unassigned rather than ignorable
- run makeuca.sh:
  ~/svn.icu/tools/trunk/src/unicode$ ./makeuca.sh ~/svn.icu/trunk/src ~/svn.icu/trunk/bld
- rebuild ICU4C
- refresh ICU4J collation data:
  (subset of instructions above for properties data refresh, except copies all coll/*)
    ~/svn.icu/trunk/bld$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
    mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/icudt45b/coll
    ~/svn.icu/trunk/bld/data/out/icu4j$ cp com/ibm/icu/impl/data/icudt45b/coll/* /tmp/icu4j/com/ibm/icu/impl/data/icudt45b/coll
    ~/svn.icu/trunk/bld/data/out/icu4j$ jar uf ~/svn.icu4j/trunk/src/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/icudt45b
- update (ICU)/source/test/testdata/CollationTest_*.txt
  and (ICU4J)/main/tests/collate/src/com/ibm/icu/dev/data/CollationTest_*.txt
  with output from Mark's Unicode tools
- run all tests with the *_SHORT.txt or the full files (the full ones have comments)
- note on intltest: if collate/UCAConformanceTest fails, then
  utility/MultithreadTest/TestCollators will fail as well;
  fix the conformance test before looking into the multi-thread test

* When refreshing all of ICU4J data from ICU4C
- ~/svn.icu/trunk/bld$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
- cp /tmp/icu4j/main/shared/data/icudata.jar ~/svn.icu4j/trunk/src/main/shared/data
or
- ~/svn.icu/trunk/bld$ make ICU4J_ROOT=~/svn.icu4j/trunk/src icu4j-data-install

*** LayoutEngine script information

(For details see the Unicode 5.2 change log below.)

* Run ICU4J com.ibm.icu.dev.tool.layout.ScriptNameBuilder. This generates LEScripts.h, LELanguages.h,
ScriptAndLanguageTags.h and ScriptAndLanguageTags.cpp in the working directory. (It also generates
ScriptRunData.cpp, which is no longer needed.)

The generated files have a current copyright date and "@draft" statement.

* copy the above files into <icu>/source/layout, replacing the old files.
* fix mixed line endings
* review the diffs and fix incorrect @draft and missing aliases;
  Unicode-derived script codes should be "born stable" like constants in uchar.h, uscript.h etc.
* manually re-add the "Indic script xyz v.2" tags in ScriptAndLanguageTags.h

---------------------------------------------------------------------------- ***

Unicode 5.2 update

*** related ICU Trac tickets

7084 Unicode 5.2

7167 verify collation bytes
7235 Java test NAME_ALIAS
7236 Java DerivedCoreProperties.txt test
7237 Java BidiTest.txt
7238 UTrie2 in core unidata
7239 test for tailoring gaps
7240 Java fix CollationMiscTest
7243 update layout engine for Unicode 5.2

*** Unicode version numbers
- makedata.mak
- uchar.h
- configure.in & configure
- update ucdVersion in gennames.c if an algorithmic range changes

*** data files & enums & parser code

* file preparation

python source\tools\genprops\misc\ucdcopy.py "C:\Documents and Settings\mscherer\My Documents\unicode\ucd\5.2.0" C:\svn\icuproj\icu\trunk\source\data\unidata
- includes finding files regardless of version numbers,
  copying them, and performing the equivalent processing of the
  ucdstrip and ucdmerge tools on the desired set of files

* notes on changes
- PropertyAliases.txt
  moved from numeric to enumerated:
    ccc       ; Canonical_Combining_Class
  new string properties:
    NFKC_CF   ; NFKC_Casefold
    Name_Alias; Name_Alias
  new binary properties:
    Cased     ; Cased
    CI        ; Case_Ignorable
    CWCF      ; Changes_When_Casefolded
    CWCM      ; Changes_When_Casemapped
    CWKCF     ; Changes_When_NFKC_Casefolded
    CWL       ; Changes_When_Lowercased
    CWT       ; Changes_When_Titlecased
    CWU       ; Changes_When_Uppercased
  new CJK Unihan properties (not supported by ICU)
- PropertyValueAliases.txt
  new block names
  new scripts
  one script code change:
    sc ; Qaai      ; Inherited
    ->
    sc ; Zinh      ; Inherited                        ; Qaai
  new Line_Break (lb) value:
    lb ; CP        ; Close_Parenthesis
  new Joining_Group (jg) values: Farsi_Yeh, Nya
  other new values:
    ccc; 214; ATA  ; Attached_Above
- DerivedBidiClass.txt
  new default-R range: U+1E800 - U+1EFFF
- UnicodeData.txt
  all of the ISO comments are gone
  new CJK block end:
    9FC3;<CJK Ideograph, Last> -> 9FCB;<CJK Ideograph, Last>
  new CJK block:
    2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
    2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;

* genpname
- run preparse.pl
  + cd \svn\icuproj\icu\trunk\source\tools\genpname
  + make sure that data.h is writable
  + perl preparse.pl \svn\icuproj\icu\trunk > out.txt
  + preparse.pl complains with errors like the following:
      Error: sc:Egyp already set to Egyptian_Hieroglyphs, cannot set to Egyp at preparse.pl line 1322, <GEN6> line 34.
    This is because ICU 4.0 had scripts from ISO 15924 which are now
    added to Unicode 5.2, and the Perl script shows a conflict between SyntheticPropertyValueAliases.txt
    and PropertyValueAliases.txt.
    -> Removed duplicate script entries from SyntheticPropertyValueAliases.txt:
       Egyp, Java, Lana, Mtei, Orkh, Armi, Avst, Kthi, Phli, Prti, Samr, Tavt
  + preparse.pl complains with errors about block names missing from uchar.h; add them

* uchar.h & uscript.h & uprops.h & uprops.c & genprops
- new block & script values
  + 26 new blocks
    copy new blocks from Blocks.txt
    MS VC++ 2008 regular expression:
      find "^{[0-9A-F]+}\.\.{[0-9A-F]+}; {[A-Z].+}$"
      replace with "    UBLOCK_\3 = 172, /*[\1]*/"
  + several new script values already added in ICU 4.0 for ISO 15924 coverage
    (removed from SyntheticPropertyValueAliases.txt, see genpname notes above)
  + 3 new script values added for ISO 15924 and Unicode 5.2 coverage
  + 1 new script value added for ISO 15924 coverage (not in Unicode 5.2)
    (added to SyntheticPropertyValueAliases.txt)
- new Joining Group (JG) values: Farsi_Yeh, Nya
- new Line_Break (lb) value:
    lb ; CP        ; Close_Parenthesis

* hardcoded Unihan range end/limit
- Unihan range end moves from 9FC3 to 9FCB
  search for both 9FC3 (end) and 9FC4 (limit) (regex 9FC[34], case-insensitive)
  + do change gennames.c

* Compare definitions of new binary properties with what we used to use
  in algorithms, to see if the definitions changed.
- Verified that definitions for Cased and Case_Ignorable are unchanged.
  The gencase tool now parses the newly public Case_Ignorable values
  in case the definition changes in the future.

* uchar.c & uprops.h & uprops.c & genprops
- new numeric values that didn't exist in Unicode data before:
    1/7, 1/9, 1/10, 3/10, 1/16, 3/16
  the ones with denominators >9 cannot be supported by uprops.icu formatVersion 5,
  therefore redesign the encoding of numeric types and values for formatVersion 6;
  design for simple numbers up to at least 144 ("one gross"),
  large values up to at least 10^20,
  and fractions with numerators -1..17 and denominators 1..16
  to cover current and expected future values
  (e.g., more Han numeric values, Meroitic twelfths)

* reimplement Hangul_Syllable_Type for new Jamo characters
- the old code assumed that all Jamo characters are in the 11xx block
- Unicode 5.2 fills holes there and adds new Jamo characters in
    A960..A97F; Hangul Jamo Extended-A
  and in
    D7B0..D7FF; Hangul Jamo Extended-B
- Hangul_Syllable_Type can be trivially derived from a subset of
  Grapheme_Cluster_Break values

* build Unicode data source code for hardcoding core data
C:\svn\icuproj\icu\trunk\source\data>NMAKE /f makedata.mak ICUMAKE=\svn\icuproj\icu\trunk\source\data\ CFG=x86\release uni-core-data

ICU data make path is \svn\icuproj\icu\trunk\source\data\
ICU root path is \svn\icuproj\icu\trunk
Information: cannot find "ucmlocal.mk". Not building user-additional converter files.
Information: cannot find "brklocal.mk". Not building user-additional break iterator files.
Information: cannot find "reslocal.mk". Not building user-additional resource bundle files.
Information: cannot find "collocal.mk". Not building user-additional resource bundle files.
Information: cannot find "rbnflocal.mk". Not building user-additional resource bundle files.
Information: cannot find "trnslocal.mk". Not building user-additional transliterator files.
Information: cannot find "misclocal.mk". Not building user-additional miscellaenous files.
Information: cannot find "spreplocal.mk". Not building user-additional stringprep files.
Creating data file for Unicode Property Names
Creating data file for Unicode Character Properties
Creating data file for Unicode Case Mapping Properties
Creating data file for Unicode BiDi/Shaping Properties
Creating data file for Unicode Normalization
Unicode .icu files built to "\svn\icuproj\icu\trunk\source\data\out\build\icudt43l"
Unicode .c source files built to "\svn\icuproj\icu\trunk\source\data\out\tmp"

- copy the .c source files to C:\svn\icuproj\icu\trunk\source\common
  and rebuild the common library

*** UCA

- update FractionalUCA.txt with new canonical closure (output from Mark's Unicode tools)
- update source/data/unidata/UCARules.txt with UCA_Rules_SHORT.txt from Mark's Unicode tools
- update source/test/testdata/CollationTest_*.txt with output from Mark's Unicode tools
[ Begin obsolete instructions:
  Starting with UCA 5.2, we use the CollationTest_*_SHORT.txt files not the *_STUB.txt files.
    - generate the source/test/testdata/CollationTest_*_STUB.txt files via source/tools/genuca/genteststub.py
      on Windows:
        python C:\svn\icuproj\icu\trunk\source\tools\genuca\genteststub.py CollationTest_NON_IGNORABLE_SHORT.txt CollationTest_NON_IGNORABLE_STUB.txt
        python C:\svn\icuproj\icu\trunk\source\tools\genuca\genteststub.py CollationTest_SHIFTED_SHORT.txt CollationTest_SHIFTED_STUB.txt
  End obsolete instructions]
- run all tests with the *_SHORT.txt or the full files (the full ones have comments)
  not just the *_STUB.txt files
- note on intltest: if collate/UCAConformanceTest fails, then
  utility/MultithreadTest/TestCollators will fail as well;
  fix the conformance test before looking into the multi-thread test

*** Implement Cased & Case_Ignorable properties
- via UProperty; call ucase.h functions ucase_getType() and ucase_getTypeOrIgnorable()
- Problem: These properties should be disjoint, but aren't
- UTC 2009nov decision: skip all Case_Ignorable regardless of whether they are Cased or not
- change ucase.icu to be able to store any combination of Cased and Case_Ignorable

*** Implement Changes_When_Xyz properties
- without stored data

*** Implement Name_Alias property
- add it as another name field in unames.icu
- make it available via u_charName() and UCharNameChoice and
- consider it in u_charFromName()

*** Break iterators

* Update break iterator rules to new UAX versions and new property values
* Update source/test/testdata/<boundary>Test.txt files from <unicode.org ucd>/ucd/auxiliary

*** new BidiTest file
- review format and data
- copy BidiTest.txt to source/test/testdata
- write test code using this data
- fix ICU code where it fails the conformance test

*** Java
- generally, find and update code corresponding to C/C++
- UCharacter.UnicodeBlock constants:
  a) add an _ID integer per new block, update COUNT
  b) add a class instance per new block
     Visual Studio regex:
        find            UBLOCK_{[^ ]+} = [0-9]+, {/.+}
        replace with    public static final UnicodeBlock \1 = new UnicodeBlock("\1", \1_ID); \2
- CHAR_NAME_ALIAS -> UCharacter.getNameAlias() and getCharFromNameAlias()

- port test changes to Java

*** LayoutEngine script information

(For comparison, see the Unicode 5.1 update: http://bugs.icu-project.org/trac/changeset/23833)

* Run ICU4J com.ibm.icu.dev.tool.layout.ScriptNameBuilder. This generates LEScripts.h, LELanguages.h,
ScriptAndLanguageTags.h and ScriptAndLanguageTags.cpp in the working directory. (It also generates
ScriptRunData.cpp, which is no longer needed.)

The generated files have a current copyright date and "@draft" statement.

-> Eric Mader wrote in email on 20090930:
    "I think the tool has been modified to update @draft to @stable for
     older scripts and to add @draft for new scripts.
     (I worked with an intern on this last year.)
     You should check the output after you run it."

* copy the above files into <icu>/source/layout, replacing the old files.
* fix mixed line endings
* review the diffs and fix incorrect @draft and missing aliases
* manually re-add the "Indic script xyz v.2" tags in ScriptAndLanguageTags.h

Add new default entries to the indicClassTables array in <icu>/source/layout/IndicClassTables.cpp
and the complexTable array in <icu>/source/layoutex/ParagraphLayout.cpp. (This step should be automated...)

-> Eric Mader wrote in email on 20090930:
    "This is just a matter of making sure that all the per-script tables have
     entries for any new scripts that were added.
     If any new Indic characters were added, then the class tables in
     IndicClassTables.cpp should be updated to reflect this.
     John Emmons should know how to do this if it's required."

* rebuild the layout and layoutex libraries.

*** Documentation
- Update User Guide
  + Jamo_Short_Name, sfc->scf, binary property value aliases

---------------------------------------------------------------------------- ***

Unicode 5.1 update

*** related ICU Trac tickets

5696 Update to Unicode 5.1

*** Unicode version numbers
- makedata.mak
- uchar.h
- configure.in & configure
- update ucdVersion in gennames.c if an algorithmic range changes

*** data files & enums & parser code

* file preparation
- ucdstrip:
    DerivedCoreProperties.txt
    DerivedNormalizationProps.txt
    NormalizationTest.txt
    PropList.txt
    Scripts.txt
    GraphemeBreakProperty.txt
    SentenceBreakProperty.txt
    WordBreakProperty.txt
- ucdstrip and ucdmerge:
    EastAsianWidth.txt
    LineBreak.txt

* my ucd2unidata.bat (needs to be updated each time with UCD and file version numbers)
copy 5.1.0\ucd\BidiMirroring.txt ..\unidata\
copy 5.1.0\ucd\Blocks.txt ..\unidata\
copy 5.1.0\ucd\CaseFolding.txt ..\unidata\
copy 5.1.0\ucd\DerivedAge.txt ..\unidata\
copy 5.1.0\ucd\extracted\DerivedBidiClass.txt ..\unidata\
copy 5.1.0\ucd\extracted\DerivedJoiningGroup.txt ..\unidata\
copy 5.1.0\ucd\extracted\DerivedJoiningType.txt ..\unidata\
copy 5.1.0\ucd\extracted\DerivedNumericValues.txt ..\unidata\
copy 5.1.0\ucd\NormalizationCorrections.txt ..\unidata\
copy 5.1.0\ucd\PropertyAliases.txt ..\unidata\
copy 5.1.0\ucd\PropertyValueAliases.txt ..\unidata\
copy 5.1.0\ucd\SpecialCasing.txt ..\unidata\
copy 5.1.0\ucd\UnicodeData.txt ..\unidata\

ucdstrip < 5.1.0\ucd\DerivedCoreProperties.txt > ..\unidata\DerivedCoreProperties.txt
ucdstrip < 5.1.0\ucd\DerivedNormalizationProps.txt > ..\unidata\DerivedNormalizationProps.txt
ucdstrip < 5.1.0\ucd\NormalizationTest.txt > ..\unidata\NormalizationTest.txt
ucdstrip < 5.1.0\ucd\PropList.txt > ..\unidata\PropList.txt
ucdstrip < 5.1.0\ucd\Scripts.txt > ..\unidata\Scripts.txt
ucdstrip < 5.1.0\ucd\auxiliary\GraphemeBreakProperty.txt > ..\unidata\GraphemeBreakProperty.txt
ucdstrip < 5.1.0\ucd\auxiliary\SentenceBreakProperty.txt > ..\unidata\SentenceBreakProperty.txt
ucdstrip < 5.1.0\ucd\auxiliary\WordBreakProperty.txt > ..\unidata\WordBreakProperty.txt
ucdstrip < 5.1.0\ucd\EastAsianWidth.txt | ucdmerge > ..\unidata\EastAsianWidth.txt
ucdstrip < 5.1.0\ucd\LineBreak.txt | ucdmerge > ..\unidata\LineBreak.txt

* genpname
- run preparse.pl
  + cd \svn\icuproj\icu\uni51\source\tools\genpname
  + make sure that data.h is writable
  + perl preparse.pl \svn\icuproj\icu\uni51 > out.txt
  + preparse.pl complains with errors like the following:
      Error: sc:Cari already set to Carian, cannot set to Cari at preparse.pl line 1308, <GEN6> line 30.
    This is because ICU 3.8 had scripts from ISO 15924 which are now
    added to Unicode 5.1, and the script shows a conflict between SyntheticPropertyValueAliases.txt
    and PropertyValueAliases.txt.
    -> Removed duplicate script entries from SyntheticPropertyValueAliases.txt:
       Cari, Cham, Kali, Lepc, Lyci, Lydi, Olck, Rjng, Saur, Sund, Vaii
  + PropertyValueAliases.txt now explicitly contains values for boolean properties:
      N/Y, No/Yes, F/T, False/True
    -> Added N/No and Y/Yes to preparse.pl function read_PropertyValueAliases.
       It will use further values from the file if present.

* uchar.h & uscript.h & uprops.h & uprops.c & genprops
- new block & script values
  + 17 new blocks
  + 11 new script values already added in ICU 3.8 for ISO 15924 coverage
    (removed from SyntheticPropertyValueAliases.txt)
  + 14 new script values added for ISO 15924 coverage (not in Unicode 5.1)
    (added to SyntheticPropertyValueAliases.txt)
- uprops.icu (uprops.h) only provides 7 bits for script codes.
  In ICU 4.0 there are USCRIPT_CODE_LIMIT=130 script codes now.
  There is none above 127 yet which is the script code for an
  assigned Unicode character, so ICU 4.0 uprops.icu does not store any
  script code values greater than 127.
  However, it does need to store the maximum script value=USCRIPT_CODE_LIMIT-1=129
  in a parallel bit field, and that overflows now.
  Also, future values >=128 would be incompatible anyway.
  uprops.h is modified to move around several of the bit fields
  in the properties vector words, and now uses 8 bits for the script code.
  Two other bit fields also grow to accommodate future growth:
  Block (current count: 172) grows from 8 to 9 bits,
  and Word_Break grows from 4 to 5 bits.
- renamed property Simple_Case_Folding (sfc->scf)
  + nothing to be done: handled as normal alias
- new property JSN Jamo_Short_Name
  + no new API: only contributes to the Name property
- new Grapheme_Cluster_Break (GCB) value: SM=SpacingMark
- new Joining Group (JG) value: Burushashki_Yeh_Barree
- new Sentence_Break (SB) values:
    SB ; CR        ; CR
    SB ; EX        ; Extend
    SB ; LF        ; LF
    SB ; SC        ; SContinue
- new Word_Break (WB) values:
    WB ; CR        ; CR
    WB ; Extend    ; Extend
    WB ; LF        ; LF
    WB ; MB        ; MidNumLet

* Further changes in the 2008-02-29 update:
- Default_Ignorable_Code_Point: The new file removes Cc, Cs, noncharacters from DICP
  because they should not normally be invisible.
- new Joining Group (JG) value Burushashki_Yeh_Barree was renamed to Burushaski_Yeh_Barree (one 'h' removed)
- new Grapheme_Cluster_Break (GCB) value: PP=Prepend
- new Word_Break (WB) value: NL=Newline

* hardcoded Unihan range end/limit (see Unicode 4.1 update for comparison)
- Unihan range end moves from 9FBB to 9FC3
  search for both 9FBB (end) and 9FBC (limit) (regex 9FB[BC], case-insensitive)
  + do change gennames.c

* build Unicode data source code for hardcoding core data
C:\svn\icuproj\icu\uni51\source\data>NMAKE /f makedata.mak ICUMAKE=\svn\icuproj\icu\uni51\source\data\ CFG=debug uni-core-data

ICU data make path is \svn\icuproj\icu\uni51\source\data\
ICU root path is \svn\icuproj\icu\uni51
Information: cannot find "ucmlocal.mk". Not building user-additional converter files.
Information: cannot find "brklocal.mk". Not building user-additional break iterator files.
Information: cannot find "reslocal.mk". Not building user-additional resource bundle files.
Information: cannot find "collocal.mk". Not building user-additional resource bundle files.
Information: cannot find "rbnflocal.mk". Not building user-additional resource bundle files.
Information: cannot find "trnslocal.mk". Not building user-additional transliterator files.
Information: cannot find "misclocal.mk". Not building user-additional miscellaenous files.
Creating data file for Unicode Character Properties
Creating data file for Unicode Case Mapping Properties
Creating data file for Unicode BiDi/Shaping Properties
Creating data file for Unicode Normalization
Unicode .icu files built to "\svn\icuproj\icu\uni51\source\data\out\build\icudt39l"
Unicode .c source files built to "\svn\icuproj\icu\uni51\source\data\out\tmp"

- copy the .c source files to C:\svn\icuproj\icu\uni51\source\common
  and rebuild the common library

*** Break iterators

* Update break iterator rules to new UAX versions and new property values

*** UCA

* update FractionalUCA.txt and UCARules.txt with new canonical closure

*** Test suites
- Test that APIs using Unicode property value aliases (like UnicodeSet)
  support all of the boolean values N/Y, No/Yes, F/T, False/True
  -> TestBinaryValues() tests in both cintltst and intltest

*** LayoutEngine script information
* Run ICU4J com.ibm.icu.dev.tool.layout.ScriptNameBuilder. This generates LEScripts.h, LELanguage.h,
ScriptAndLanguageTags.h and ScriptAndLanguageTags.cpp in the working directory. (it also generates
ScriptRunData.cpp, which is no longer needed.)

The generated files have a current copyright date and "@draft" statement.

* copy the above files into <icu>/source/layout, replacing the old files.

Add new default entries to the indicClassTables array in <icu>/source/layout/IndicClassTables.cpp
and the complexTable array in <icu>/source/layoutex/ParagraphLayout.cpp. (This step should be automated...)

* rebuild the layout and layoutex libraries.

*** Documentation
- Update User Guide
  + Jamo_Short_Name, sfc->scf, binary property value aliases

---------------------------------------------------------------------------- ***

Unicode 5.0 update

*** related Jitterbugs

5084 RFE: Update to Unicode 5.0

*** data files & enums & parser code

* file preparation
- ucdstrip:
    DerivedCoreProperties.txt
    DerivedNormalizationProps.txt
    NormalizationTest.txt
    PropList.txt
    Scripts.txt
    GraphemeBreakProperty.txt
    SentenceBreakProperty.txt
    WordBreakProperty.txt
- ucdstrip and ucdmerge:
    EastAsianWidth.txt
    LineBreak.txt

* my ucd2unidata.bat (needs to be updated each time with UCD and file version numbers)
copy 5.0.0\ucd\BidiMirroring.txt ..\unidata\
copy 5.0.0\ucd\Blocks.txt ..\unidata\
copy 5.0.0\ucd\CaseFolding.txt ..\unidata\
copy 5.0.0\ucd\DerivedAge.txt ..\unidata\
copy 5.0.0\ucd\extracted\DerivedBidiClass.txt ..\unidata\
copy 5.0.0\ucd\extracted\DerivedJoiningGroup.txt ..\unidata\
copy 5.0.0\ucd\extracted\DerivedJoiningType.txt ..\unidata\
copy 5.0.0\ucd\extracted\DerivedNumericValues.txt ..\unidata\
copy 5.0.0\ucd\NormalizationCorrections.txt ..\unidata\
copy 5.0.0\ucd\PropertyAliases.txt ..\unidata\
copy 5.0.0\ucd\PropertyValueAliases.txt ..\unidata\
copy 5.0.0\ucd\SpecialCasing.txt ..\unidata\
copy 5.0.0\ucd\UnicodeData.txt ..\unidata\

ucdstrip < 5.0.0\ucd\DerivedCoreProperties.txt > ..\unidata\DerivedCoreProperties.txt
ucdstrip < 5.0.0\ucd\DerivedNormalizationProps.txt > ..\unidata\DerivedNormalizationProps.txt
ucdstrip < 5.0.0\ucd\NormalizationTest.txt > ..\unidata\NormalizationTest.txt
ucdstrip < 5.0.0\ucd\PropList.txt > ..\unidata\PropList.txt
ucdstrip < 5.0.0\ucd\Scripts.txt > ..\unidata\Scripts.txt
ucdstrip < 5.0.0\ucd\auxiliary\GraphemeBreakProperty.txt > ..\unidata\GraphemeBreakProperty.txt
ucdstrip < 5.0.0\ucd\auxiliary\SentenceBreakProperty.txt > ..\unidata\SentenceBreakProperty.txt
ucdstrip < 5.0.0\ucd\auxiliary\WordBreakProperty.txt > ..\unidata\WordBreakProperty.txt
ucdstrip < 5.0.0\ucd\EastAsianWidth.txt | ucdmerge > ..\unidata\EastAsianWidth.txt
ucdstrip < 5.0.0\ucd\LineBreak.txt | ucdmerge > ..\unidata\LineBreak.txt

* update FractionalUCA.txt and UCARules.txt with new canonical closure

* genpname
- run preparse.pl
  + make sure that data.h is writable
  + perl preparse.pl \cvs\oss\icu > out.txt

* uchar.h & uscript.h & uprops.h & uprops.c & genprops
- new block & script values
  + script values already added in ICU 3.6 because all of ISO 15924 is now covered

* build Unicode data source code for hardcoding core data
C:\cvs\oss\icu\source\data>NMAKE /f makedata.mak ICUMAKE=\cvs\oss\icu\source\data\ CFG=debug uni-core-data

ICU data make path is \cvs\oss\icu\source\data\
ICU root path is \cvs\oss\icu
Information: cannot find "ucmlocal.mk". Not building user-additional converter files.
[etc.]
Creating data file for Unicode Character Properties
Creating data file for Unicode Case Mapping Properties
Creating data file for Unicode BiDi/Shaping Properties
Creating data file for Unicode Normalization
Unicode .icu files built to "\cvs\oss\icu\source\data\out\build\icudt35l"
Unicode .c source files built to "\cvs\oss\icu\source\data\out\tmp"

- copy the .c source files to C:\cvs\oss\icu\source\common
  and rebuild the common library

*** Unicode version numbers
- makedata.mak
- uchar.h
- configure.in

*** LayoutEngine script information
* Run ICU4J com.ibm.icu.dev.tool.layout.ScriptNameBuilder. This generates LEScripts.h, LELanguage.h,
ScriptAndLanguageTags.h and ScriptAndLanguageTags.cpp in the working directory. (it also generates
ScriptRunData.cpp, which is no longer needed.)

The generated files have a current copyright date and "@draft" statement.

* copy the above files into <icu>/source/layout, replacing the old files.

Add new default entries to the indicClassTables array in <icu>/source/layout/IndicClassTables.cpp
and the complexTable array in <icu>/source/layoutex/ParagraphLayout.cpp. (This step should be automated...)

* rebuild the layout and layoutex libraries.

---------------------------------------------------------------------------- ***

Unicode 4.1 update

*** related Jitterbugs

4332 RFE: Update to Unicode 4.1
4157 RBBI, TR29 4.1 updates

*** data files & enums & parser code

* file preparation
- ucdstrip:
    DerivedCoreProperties.txt
    DerivedNormalizationProps.txt
    NormalizationTest.txt
    GraphemeBreakProperty.txt
    SentenceBreakProperty.txt
    WordBreakProperty.txt
- ucdstrip and ucdmerge:
    EastAsianWidth.txt
    LineBreak.txt

* add new files to the repository
    GraphemeBreakProperty.txt
    SentenceBreakProperty.txt
    WordBreakProperty.txt

* update FractionalUCA.txt and UCARules.txt with new canonical closure

* genpname
- handle new enumerated properties in sub read_uchar
- run preparse.pl

* uchar.h & uscript.h & uprops.h & uprops.c & genprops
- new binary properties
  + Pattern_Syntax
  + Pattern_White_Space
- new enumerated properties
  + Grapheme_Cluster_Break
  + Sentence_Break
  + Word_Break
- new block & script & line break values

* gencase
- case-ignorable changes
  see http://www.unicode.org/versions/Unicode4.1.0/#CaseMods
  now: (D47a) Word_Break=MidLetter or Mn, Me, Cf, Lm, Sk

*** Unicode version numbers
- makedata.mak
- uchar.h
- configure.in

*** tests
- verify that u_charMirror() round-trips
- test all new properties and some new values of old properties

*** other code

* hardcoded Unihan range end/limit
- Unihan range end moves from 9FA5 to 9FBB
  search for both 9FA5 (end) and 9FA6 (limit) (regex 9FA[56], case-insensitive)
  + do not modify BOCU/BOCSU code because that would change the encoding
    and break binary compatibility!
  + similarly, do not change the GB 18030 range data (ucnvmbcs.c),
    NamePrepProfile.txt
  + ignore trietest.c: test data is arbitrary
  + ignore tstnorm.cpp: test optimization, not important
  + ignore collation: 9FA[56] only appears in comments; swapCJK() uses the whole block up to 9FFF
  + do change line_th.txt and word_th.txt
    by replacing hardcoded ranges with the new property values
  + do change gennames.c

source\data\brkitr\line_th.txt(229):        \u33E0-\u33FE \u3400-\u4DB5 \u4E00-\u9FA5 \uA000-\uA48C \uA490-\uA4C6
source\data\brkitr\word_th.txt(23):        \u33E0-\u33FE \u3400-\u4DB5 \u4E00-\u9FA5 \uA000-\uA48C \uA490-\uA4C6
source\tools\gennames\gennames.c(971):        0x4e00, 0x9fa5,

* case mappings
- compare new special casing context conditions with previous ones
  see http://www.unicode.org/versions/Unicode4.1.0/#CaseMods

* genpname
- consider storing only the short name if it is the same as the long name

*** other reviews
- UAX #29 changes (grapheme/word/sentence breaks)
- UAX #14 changes (line breaks)
- Pattern_Syntax & Pattern_White_Space

---------------------------------------------------------------------------- ***

Unicode 4.0.1 update

*** related Jitterbugs

3170 RFE: Update to Unicode 4.0.1
3171 Add new Unicode 4.0.1 properties
3520 use Unicode 4.0.1 updates for break iteration

*** data files & enums & parser code

* file preparation
- ucdstrip: DerivedNormalizationProps.txt, NormalizationTest.txt, DerivedCoreProperties.txt
- ucdstrip and ucdmerge: EastAsianWidth.txt, LineBreak.txt

* file fixes
- fix UnicodeData.txt general categories of Ethiopic digits Nd->No
  according to PRI #26
  http://www.unicode.org/review/resolved-pri.html#pri26
- undone again because no corrigendum in sight;
  instead modified tests to not check consistency on this for Unicode 4.0.1

* ucdterms.txt
- update from http://www.unicode.org/copyright.html
  formatted for plain text

* uchar.h & uprops.h & uprops.c & genprops
- add UBLOCK_CYRILLIC_SUPPLEMENT because the block is renamed
- add U_LB_INSEPARABLE due to a spelling fix
  + put short name comment only on line with new constant
    for genpname perl script parser
- new binary properties
  + STerm
  + Variation_Selector

* genpname
- fix genpname perl script so that it doesn't choke on more than 2 names per property value
- perl script: correctly calculate the maximum number of fields per row

* uscript.h
- new script code Hrkt=Katakana_Or_Hiragana

* gennorm.c track changes in DerivedNormalizationProps.txt
- "FNC" -> "FC_NFKC"
- single field "NFD_NO" -> two fields "NFD_QC; N" etc.

* genprops/props2.c track changes in DerivedNumericValues.txt
- changed from 3 columns to 2, dropping the numeric type
  + assume that the type is always numeric for Han characters,
    and that only those are added in addition to what UnicodeData.txt lists

*** Unicode version numbers
- makedata.mak
- uchar.h
- configure.in

*** tests
- update test of default bidi classes according to PRI #28
  /tsutil/cucdtst/TestUnicodeData
  http://www.unicode.org/review/resolved-pri.html#pri28
- bidi tests: change exemplar character for ES depending on Unicode version
- change hardcoded expected property values where they change

*** other code

* name matching
- read UCD.html

* scripts
- use new Hrkt=Katakana_Or_Hiragana

* ZWJ & ZWNJ
- are now part of combining character sequences
- break iteration used to assume that LB classes did not overlap; now they do for ZWJ & ZWNJ
