@@ -9,54 +9,52 @@ namespace System
9
9
public partial struct Rune
10
10
{
11
11
static uint [ , ] combining = new uint [ , ] {
12
- { 0x0300 , 0x036F , 0 } , { 0x0483 , 0x0486 , 0 } , { 0x0488 , 0x0489 , 0 } ,
13
- { 0x0591 , 0x05BD , 0 } , { 0x05BF , 0x05BF , 0 } , { 0x05C1 , 0x05C2 , 0 } ,
14
- { 0x05C4 , 0x05C5 , 0 } , { 0x05C7 , 0x05C7 , 0 } , { 0x0600 , 0x0603 , 0 } ,
15
- { 0x0610 , 0x0615 , 0 } , { 0x064B , 0x065E , 0 } , { 0x0670 , 0x0670 , 0 } ,
16
- { 0x06D6 , 0x06E4 , 0 } , { 0x06E7 , 0x06E8 , 0 } , { 0x06EA , 0x06ED , 0 } ,
17
- { 0x070F , 0x070F , 0 } , { 0x0711 , 0x0711 , 0 } , { 0x0730 , 0x074A , 0 } ,
18
- { 0x07A6 , 0x07B0 , 0 } , { 0x07EB , 0x07F3 , 0 } , { 0x0901 , 0x0902 , 0 } ,
19
- { 0x093C , 0x093C , 0 } , { 0x0941 , 0x0948 , 0 } , { 0x094D , 0x094D , 0 } ,
20
- { 0x0951 , 0x0954 , 0 } , { 0x0962 , 0x0963 , 0 } , { 0x0981 , 0x0981 , 0 } ,
21
- { 0x09BC , 0x09BC , 0 } , { 0x09C1 , 0x09C4 , 0 } , { 0x09CD , 0x09CD , 0 } ,
22
- { 0x09E2 , 0x09E3 , 0 } , { 0x0A01 , 0x0A02 , 0 } , { 0x0A3C , 0x0A3C , 0 } ,
23
- { 0x0A41 , 0x0A42 , 0 } , { 0x0A47 , 0x0A48 , 0 } , { 0x0A4B , 0x0A4D , 0 } ,
24
- { 0x0A70 , 0x0A71 , 0 } , { 0x0A81 , 0x0A82 , 0 } , { 0x0ABC , 0x0ABC , 0 } ,
25
- { 0x0AC1 , 0x0AC5 , 0 } , { 0x0AC7 , 0x0AC8 , 0 } , { 0x0ACD , 0x0ACD , 0 } ,
26
- { 0x0AE2 , 0x0AE3 , 0 } , { 0x0B01 , 0x0B01 , 0 } , { 0x0B3C , 0x0B3C , 0 } ,
27
- { 0x0B3F , 0x0B3F , 0 } , { 0x0B41 , 0x0B43 , 0 } , { 0x0B4D , 0x0B4D , 0 } ,
28
- { 0x0B56 , 0x0B56 , 0 } , { 0x0B82 , 0x0B82 , 0 } , { 0x0BC0 , 0x0BC0 , 0 } ,
29
- { 0x0BCD , 0x0BCD , 0 } , { 0x0C3E , 0x0C40 , 0 } , { 0x0C46 , 0x0C48 , 0 } ,
30
- { 0x0C4A , 0x0C4D , 0 } , { 0x0C55 , 0x0C56 , 0 } , { 0x0CBC , 0x0CBC , 0 } ,
31
- { 0x0CBF , 0x0CBF , 0 } , { 0x0CC6 , 0x0CC6 , 0 } , { 0x0CCC , 0x0CCD , 0 } ,
32
- { 0x0CE2 , 0x0CE3 , 0 } , { 0x0D41 , 0x0D43 , 0 } , { 0x0D4D , 0x0D4D , 0 } ,
33
- { 0x0DCA , 0x0DCA , 0 } , { 0x0DD2 , 0x0DD4 , 0 } , { 0x0DD6 , 0x0DD6 , 0 } ,
34
- { 0x0E31 , 0x0E31 , 0 } , { 0x0E34 , 0x0E3A , 0 } , { 0x0E47 , 0x0E4E , 0 } ,
35
- { 0x0EB1 , 0x0EB1 , 0 } , { 0x0EB4 , 0x0EB9 , 0 } , { 0x0EBB , 0x0EBC , 0 } ,
36
- { 0x0EC8 , 0x0ECD , 0 } , { 0x0F18 , 0x0F19 , 0 } , { 0x0F35 , 0x0F35 , 0 } ,
37
- { 0x0F37 , 0x0F37 , 0 } , { 0x0F39 , 0x0F39 , 0 } , { 0x0F71 , 0x0F7E , 0 } ,
38
- { 0x0F80 , 0x0F84 , 0 } , { 0x0F86 , 0x0F87 , 0 } , { 0x0F90 , 0x0F97 , 0 } ,
39
- { 0x0F99 , 0x0FBC , 0 } , { 0x0FC6 , 0x0FC6 , 0 } , { 0x102D , 0x1030 , 0 } ,
40
- { 0x1032 , 0x1032 , 0 } , { 0x1036 , 0x1037 , 0 } , { 0x1039 , 0x1039 , 0 } ,
41
- { 0x1058 , 0x1059 , 0 } , { 0x1160 , 0x11FF , 2 } , { 0x135F , 0x135F , 0 } ,
42
- { 0x1712 , 0x1714 , 0 } , { 0x1732 , 0x1734 , 0 } , { 0x1752 , 0x1753 , 0 } ,
43
- { 0x1772 , 0x1773 , 0 } , { 0x17B4 , 0x17B5 , 0 } , { 0x17B7 , 0x17BD , 0 } ,
44
- { 0x17C6 , 0x17C6 , 0 } , { 0x17C9 , 0x17D3 , 0 } , { 0x17DD , 0x17DD , 0 } ,
45
- { 0x180B , 0x180D , 0 } , { 0x18A9 , 0x18A9 , 0 } , { 0x1920 , 0x1922 , 0 } ,
46
- { 0x1927 , 0x1928 , 0 } , { 0x1932 , 0x1932 , 0 } , { 0x1939 , 0x193B , 0 } ,
47
- { 0x1A17 , 0x1A18 , 0 } , { 0x1B00 , 0x1B03 , 0 } , { 0x1B34 , 0x1B34 , 0 } ,
48
- { 0x1B36 , 0x1B3A , 0 } , { 0x1B3C , 0x1B3C , 0 } , { 0x1B42 , 0x1B42 , 0 } ,
49
- { 0x1B6B , 0x1B73 , 0 } , { 0x1DC0 , 0x1DCA , 0 } , { 0x1DFE , 0x1DFF , 0 } ,
50
- { 0x200B , 0x200F , 0 } , { 0x202A , 0x202E , 0 } , { 0x2060 , 0x2063 , 0 } ,
51
- { 0x206A , 0x206F , 0 } , { 0x20D0 , 0x20EF , 0 } , { 0x302A , 0x302F , 2 } ,
52
- { 0x3099 , 0x309A , 2 } , { 0xA806 , 0xA806 , 0 } , { 0xA80B , 0xA80B , 0 } ,
53
- { 0xA825 , 0xA826 , 0 } , { 0xFB1E , 0xFB1E , 0 } , { 0xFE00 , 0xFE0F , 0 } ,
54
- { 0xFE20 , 0xFE23 , 0 } , { 0xFEFF , 0xFEFF , 0 } , { 0xFFF9 , 0xFFFB , 0 } ,
55
- { 0x10A01 , 0x10A03 , 0 } , { 0x10A05 , 0x10A06 , 0 } , { 0x10A0C , 0x10A0F , 0 } ,
56
- { 0x10A38 , 0x10A3A , 0 } , { 0x10A3F , 0x10A3F , 0 } , { 0x1D167 , 0x1D169 , 2 } ,
57
- { 0x1D173 , 0x1D182 , 2 } , { 0x1D185 , 0x1D18B , 2 } , { 0x1D1AA , 0x1D1AD , 2 } ,
58
- { 0x1D242 , 0x1D244 , 2 } , { 0xE0001 , 0xE0001 , 0 } , { 0xE0020 , 0xE007F , 0 } ,
59
- { 0xE0100 , 0xE01EF , 0 }
12
+ { 0x0300 , 0x036F } , { 0x0483 , 0x0486 } , { 0x0488 , 0x0489 } ,
13
+ { 0x0591 , 0x05BD } , { 0x05BF , 0x05BF } , { 0x05C1 , 0x05C2 } ,
14
+ { 0x05C4 , 0x05C5 } , { 0x05C7 , 0x05C7 } , { 0x0600 , 0x0603 } ,
15
+ { 0x0610 , 0x0615 } , { 0x064B , 0x065E } , { 0x0670 , 0x0670 } ,
16
+ { 0x06D6 , 0x06E4 } , { 0x06E7 , 0x06E8 } , { 0x06EA , 0x06ED } ,
17
+ { 0x070F , 0x070F } , { 0x0711 , 0x0711 } , { 0x0730 , 0x074A } ,
18
+ { 0x07A6 , 0x07B0 } , { 0x07EB , 0x07F3 } , { 0x0901 , 0x0902 } ,
19
+ { 0x093C , 0x093C } , { 0x0941 , 0x0948 } , { 0x094D , 0x094D } ,
20
+ { 0x0951 , 0x0954 } , { 0x0962 , 0x0963 } , { 0x0981 , 0x0981 } ,
21
+ { 0x09BC , 0x09BC } , { 0x09C1 , 0x09C4 } , { 0x09CD , 0x09CD } ,
22
+ { 0x09E2 , 0x09E3 } , { 0x0A01 , 0x0A02 } , { 0x0A3C , 0x0A3C } ,
23
+ { 0x0A41 , 0x0A42 } , { 0x0A47 , 0x0A48 } , { 0x0A4B , 0x0A4D } ,
24
+ { 0x0A70 , 0x0A71 } , { 0x0A81 , 0x0A82 } , { 0x0ABC , 0x0ABC } ,
25
+ { 0x0AC1 , 0x0AC5 } , { 0x0AC7 , 0x0AC8 } , { 0x0ACD , 0x0ACD } ,
26
+ { 0x0AE2 , 0x0AE3 } , { 0x0B01 , 0x0B01 } , { 0x0B3C , 0x0B3C } ,
27
+ { 0x0B3F , 0x0B3F } , { 0x0B41 , 0x0B43 } , { 0x0B4D , 0x0B4D } ,
28
+ { 0x0B56 , 0x0B56 } , { 0x0B82 , 0x0B82 } , { 0x0BC0 , 0x0BC0 } ,
29
+ { 0x0BCD , 0x0BCD } , { 0x0C3E , 0x0C40 } , { 0x0C46 , 0x0C48 } ,
30
+ { 0x0C4A , 0x0C4D } , { 0x0C55 , 0x0C56 } , { 0x0CBC , 0x0CBC } ,
31
+ { 0x0CBF , 0x0CBF } , { 0x0CC6 , 0x0CC6 } , { 0x0CCC , 0x0CCD } ,
32
+ { 0x0CE2 , 0x0CE3 } , { 0x0D41 , 0x0D43 } , { 0x0D4D , 0x0D4D } ,
33
+ { 0x0DCA , 0x0DCA } , { 0x0DD2 , 0x0DD4 } , { 0x0DD6 , 0x0DD6 } ,
34
+ { 0x0E31 , 0x0E31 } , { 0x0E34 , 0x0E3A } , { 0x0E47 , 0x0E4E } ,
35
+ { 0x0EB1 , 0x0EB1 } , { 0x0EB4 , 0x0EB9 } , { 0x0EBB , 0x0EBC } ,
36
+ { 0x0EC8 , 0x0ECD } , { 0x0F18 , 0x0F19 } , { 0x0F35 , 0x0F35 } ,
37
+ { 0x0F37 , 0x0F37 } , { 0x0F39 , 0x0F39 } , { 0x0F71 , 0x0F7E } ,
38
+ { 0x0F80 , 0x0F84 } , { 0x0F86 , 0x0F87 } , { 0x0F90 , 0x0F97 } ,
39
+ { 0x0F99 , 0x0FBC } , { 0x0FC6 , 0x0FC6 } , { 0x102D , 0x1030 } ,
40
+ { 0x1032 , 0x1032 } , { 0x1036 , 0x1037 } , { 0x1039 , 0x1039 } ,
41
+ { 0x1058 , 0x1059 } , { 0x1160 , 0x11FF } , { 0x135F , 0x135F } ,
42
+ { 0x1712 , 0x1714 } , { 0x1732 , 0x1734 } , { 0x1752 , 0x1753 } ,
43
+ { 0x1772 , 0x1773 } , { 0x17B4 , 0x17B5 } , { 0x17B7 , 0x17BD } ,
44
+ { 0x17C6 , 0x17C6 } , { 0x17C9 , 0x17D3 } , { 0x17DD , 0x17DD } ,
45
+ { 0x180B , 0x180D } , { 0x18A9 , 0x18A9 } , { 0x1920 , 0x1922 } ,
46
+ { 0x1927 , 0x1928 } , { 0x1932 , 0x1932 } , { 0x1939 , 0x193B } ,
47
+ { 0x1A17 , 0x1A18 } , { 0x1B00 , 0x1B03 } , { 0x1B34 , 0x1B34 } ,
48
+ { 0x1B36 , 0x1B3A } , { 0x1B3C , 0x1B3C } , { 0x1B42 , 0x1B42 } ,
49
+ { 0x1B6B , 0x1B73 } , { 0x1DC0 , 0x1DCA } , { 0x1DFE , 0x1DFF } ,
50
+ { 0x200B , 0x200F } , { 0x202A , 0x202E } , { 0x2060 , 0x2063 } ,
51
+ { 0x206A , 0x206F } , { 0x20D0 , 0x20EF } , { 0x2e9a , 0x2e9a } ,
52
+ { 0x2ef4 , 0x2eff } , { 0x2fd6 , 0x2fef } , { 0x2ffc , 0x2fff } ,
53
+ { 0x31e4 , 0x31ef } , { 0x321f , 0x321f } , { 0xA48D , 0xA48F } ,
54
+ { 0xA806 , 0xA806 } , { 0xA80B , 0xA80B } , { 0xA825 , 0xA826 } ,
55
+ { 0xFB1E , 0xFB1E } , { 0xFE00 , 0xFE0F } , { 0xFE1A , 0xFE1F } ,
56
+ { 0xFE20 , 0xFE23 } , { 0xFE53 , 0xFE53 } , { 0xFE67 , 0xFE67 } ,
57
+ { 0xFEFF , 0xFEFF } , { 0xFFF9 , 0xFFFB } ,
60
58
} ;
61
59
62
60
static uint [ , ] combiningWideChars = new uint [ , ] {
@@ -70,12 +68,23 @@ public partial struct Rune
70
68
/* Alphabetic Presentation Forms - 0xFB00, 0xFb4f */
71
69
/* Chess Symbols - 0x1FA00, 0x1FA0f */
72
70
73
- { 0x1100 , 0x115f , 2 } , { 0x231a , 0x231b , 2 } , { 0x2e80 , 0x303e , 2 } ,
74
- { 0x3041 , 0x3096 , 2 } , { 0x3099 , 0x30ff , 2 } , { 0x3105 , 0x312e , 2 } ,
75
- { 0x3131 , 0x318e , 2 } , { 0x3190 , 0x3247 , 2 } , { 0x3250 , 0x4dbf , 2 } ,
76
- { 0x4e00 , 0xa4c6 , 2 } , { 0xa960 , 0xa97c , 2 } , { 0xac00 , 0xd7a3 , 2 } ,
77
- { 0xf900 , 0xfaff , 2 } , { 0xfe10 , 0xfe1f , 2 } , { 0xfe30 , 0xfe6b , 2 } ,
78
- { 0xff01 , 0xff60 , 2 } , { 0xffe0 , 0xffe6 , 2 }
71
+ { 0x1100 , 0x115f } , { 0x231a , 0x231b } , { 0x2329 , 0x232a } ,
72
+ { 0x23e9 , 0x23ec } , { 0x23f0 , 0x23f0 } , { 0x23f3 , 0x23f3 } ,
73
+ { 0x25fd , 0x25fe } , { 0x2614 , 0x2615 } , { 0x2648 , 0x2653 } ,
74
+ { 0x267f , 0x267f } , { 0x2693 , 0x2693 } , { 0x26a1 , 0x26a1 } ,
75
+ { 0x26aa , 0x26ab } , { 0x26bd , 0x26be } , { 0x26c4 , 0x26c5 } ,
76
+ { 0x26ce , 0x26ce } , { 0x26d4 , 0x26d4 } , { 0x26ea , 0x26ea } ,
77
+ { 0x26f2 , 0x26f3 } , { 0x26f5 , 0x26f5 } , { 0x26fa , 0x26fa } ,
78
+ { 0x26fd , 0x26fd } , { 0x2705 , 0x2705 } , { 0x270a , 0x270b } ,
79
+ { 0x2728 , 0x2728 } , { 0x274c , 0x274c } , { 0x274e , 0x274e } ,
80
+ { 0x2753 , 0x2755 } , { 0x2757 , 0x2757 } , { 0x2795 , 0x2797 } ,
81
+ { 0x27b0 , 0x27b0 } , { 0x27bf , 0x27bf } , { 0x2b1b , 0x2b1c } ,
82
+ { 0x2b50 , 0x2b50 } , { 0x2b55 , 0x2b55 } , { 0x2e80 , 0x303e } ,
83
+ { 0x3041 , 0x3096 } , { 0x3099 , 0x30ff } , { 0x3105 , 0x312f } ,
84
+ { 0x3131 , 0x318e } , { 0x3190 , 0x3247 } , { 0x3250 , 0x4dbf } ,
85
+ { 0x4e00 , 0xa4c6 } , { 0xa960 , 0xa97c } , { 0xac00 , 0xd7a3 } ,
86
+ { 0xf900 , 0xfaff } , { 0xfe10 , 0xfe1f } , { 0xfe30 , 0xfe6b } ,
87
+ { 0xff01 , 0xff60 } , { 0xffe0 , 0xffe6 }
79
88
} ;
80
89
81
90
static int bisearch ( uint rune , uint [ , ] table , int max )
@@ -99,23 +108,24 @@ static int bisearch(uint rune, uint[,] table, int max)
99
108
return 0 ;
100
109
}
101
110
102
- static bool bisearch ( uint rune , uint [ , ] table , out int width )
103
- {
104
- width = 0 ;
105
- var length = table . GetLength ( 0 ) ;
106
- if ( length == 0 || rune < table [ 0 , 0 ] || rune > table [ length - 1 , 1 ] )
107
- return false ;
108
-
109
- for ( int i = 0 ; i < length ; i ++ )
110
- {
111
- if ( rune >= table [ i , 0 ] && rune <= table [ i , 1 ] ) {
112
- width = ( int ) table [ i , 2 ] ;
113
- return true ;
114
- }
115
- }
116
-
117
- return false ;
118
- }
111
+ //static bool bisearch(uint rune, uint[,] table, out int width)
112
+ //{
113
+ // width = 0;
114
+ // var length = table.GetLength(0);
115
+ // if (length == 0 || rune < table[0, 0] || rune > table[length - 1, 1])
116
+ // return false;
117
+
118
+ // for (int i = 0; i < length; i++)
119
+ // {
120
+ // if (rune >= table[i, 0] && rune <= table[i, 1])
121
+ // {
122
+ // width = (int)table[i, 2];
123
+ // return true;
124
+ // }
125
+ // }
126
+
127
+ // return false;
128
+ //}
119
129
120
130
static uint gethexaformat ( uint rune , int length )
121
131
{
@@ -128,22 +138,21 @@ static uint gethexaformat(uint rune, int length)
128
138
/// Check if the rune is a non-spacing character.
129
139
/// </summary>
130
140
/// <param name="rune">The rune.</param>
131
- /// <param name="width">The width.</param>
132
141
/// <returns>True if is a non-spacing character, false otherwise.</returns>
133
- public static bool IsNonSpacingChar ( uint rune , out int width )
134
- {
135
- return bisearch ( rune , combining , out width ) ;
136
- }
142
+ public static bool IsNonSpacingChar ( uint rune )
143
+ {
144
+ return bisearch ( rune , combining , combining . GetLength ( 0 ) - 1 ) != 0 ;
145
+ }
137
146
138
147
/// <summary>
139
148
/// Check if the rune is a wide character.
140
149
/// </summary>
141
150
/// <param name="rune">The rune.</param>
142
151
/// <returns>True if is a wide character, false otherwise.</returns>
143
152
public static bool IsWideChar ( uint rune )
144
- {
145
- return bisearch ( gethexaformat ( rune , 4 ) , combiningWideChars , out _ ) ;
146
- }
153
+ {
154
+ return bisearch ( gethexaformat ( rune , 4 ) , combiningWideChars , combiningWideChars . GetLength ( 0 ) - 1 ) != 0 ;
155
+ }
147
156
148
157
static char firstSurrogatePairChar = '\0 ' ;
149
158
@@ -162,12 +171,11 @@ public static int ColumnWidth(Rune rune)
162
171
if ( irune < 0x7f )
163
172
return 1 ;
164
173
/* binary search in table of non-spacing characters */
165
- if ( bisearch ( irune , combining , out int width ) )
166
- // if (bisearch(irune, combining, combining.GetLength(0) - 1) != 0)
167
- // return 0;
168
- return width ;
174
+ if ( bisearch ( gethexaformat ( irune , 4 ) , combining , combining . GetLength ( 0 ) - 1 ) != 0 )
175
+ return 0 ;
169
176
/* if we arrive here, ucs is not a combining or C0/C1 control character */
170
- return bisearch ( gethexaformat ( irune , 4 ) , combiningWideChars , out width ) ? width : 1 ;
177
+ return 1 +
178
+ ( bisearch ( gethexaformat ( irune , 4 ) , combiningWideChars , combiningWideChars . GetLength ( 0 ) - 1 ) != 0 ? 1 : 0 ) ;
171
179
}
172
180
173
181
/// <summary>
0 commit comments