1 !!!NOTE!!! The implementation had been improved without updating this
2 document, so some part of it is obsolete.
5 * CharUnicodeInfo internal design
7 ** Normalization information structures
9 From DerivedNormalizationProps.txt
10 NormalizationCorrections.txt
14 1) byte [] NormalizationPropIndexes (length = 65536)
16 2) int [] NormalizationPropValues (length = property value count)
18 A value consists of those flags:
31 10 Full_Composition_Exclusion
32 11-12 index to NormalizationCorrections
33 16-31 FC_NFKC : short[]
35 plus - index to SingleNormalization
36 minus - 0xF0000000 and index to MultiNormalization
38 3) char [] SingleNormalization
39 FIXME: it should consider NormalizationCorrections.txt
41 4) char [] MultiNormalization (index for each 4 bytes, zero padded)
44 6) int [] canonEquiv : index to canonicalEq
47 ** Default Collation Element Table
49 From allkeys.txt from UCA
50 To CollationElementTable.cs
60 SortKeyValue [] keyValues; of length count of defined values
62 struct CollationElementEntry {
67 int [] collElem; of length char.MaxValue
69 0-15 : index of top entry to keyValues
70 16-31 : count or 0 (count = 1)
72 Indexes are computed for compression (eliminating vast zero-arrays).
73 See CollationElementTableUtil.cs for the implementation.
76 ** Combining class information
78 From DerivedCombiningClass.txt
81 It generates one simple GetCombiningClass () method.
85 From EastAsianWidth.txt
87 1) WidthType : enum ( : short)
88 values are: N/A/H/W/F/Na (FIXME: descriptive names!)
91 ** Case folding information
95 (SpecialCasing.txt is not considered. We could use TextInfo.)
97 Common case folding is handled in Char.ToLower(InvariantCulture).
99 1) CaseFoldingIndexes : short index to CaseFolding
101 2) CaseFoldingDetails : array of CaseFolding structure defined below:
111 ** Properties which do not consist of tables
113 - Hex_Digit, ASCII_Hex_Digit : too few to create tables.
114 - Logical_Order_Exception : too few to create table.