@@ -112,7 +112,49 @@ def escape_char(c):
112
112
return "'\\ u%4.4x'" % c
113
113
return "'\\ U%8.8x'" % c
114
114
115
+ def ch_prefix (ix ):
116
+ if ix == 0 :
117
+ return " "
118
+ if ix % 2 == 0 :
119
+ return ",\n "
120
+ else :
121
+ return ", "
122
+
123
+ def emit_bsearch_range_table (f ):
124
+ f .write ("""
125
+ pure fn bsearch_range_table(c: char, r: &[(char,char)]) -> bool {
126
+ use cmp::{EQ, LT, GT};
127
+ use vec::bsearch;
128
+ use option::None;
129
+ (do bsearch(r) |&(lo,hi)| {
130
+ if lo <= c && c <= hi { EQ }
131
+ else if hi < c { LT }
132
+ else { GT }
133
+ }) != None
134
+ }\n \n
135
+ """ );
136
+
115
137
def emit_property_module (f , mod , tbl ):
138
+ f .write ("pub mod %s {\n " % mod )
139
+ keys = tbl .keys ()
140
+ keys .sort ()
141
+ emit_bsearch_range_table (f );
142
+ for cat in keys :
143
+ f .write (" const %s_table : &[(char,char)] = &[\n " % cat )
144
+ ix = 0
145
+ for pair in tbl [cat ]:
146
+ f .write (ch_prefix (ix ))
147
+ f .write ("(%s, %s)" % (escape_char (pair [0 ]), escape_char (pair [1 ])))
148
+ ix += 1
149
+ f .write ("\n ];\n \n " )
150
+
151
+ f .write (" pub pure fn %s(c: char) -> bool {\n " % cat )
152
+ f .write (" bsearch_range_table(c, %s_table)\n " % cat )
153
+ f .write (" }\n \n " )
154
+ f .write ("}\n " )
155
+
156
+
157
+ def emit_property_module_old (f , mod , tbl ):
116
158
f .write ("mod %s {\n " % mod )
117
159
keys = tbl .keys ()
118
160
keys .sort ()
@@ -193,8 +235,9 @@ def emit_decomp_module(f, canon, compat):
193
235
rf = open (r , "w" )
194
236
195
237
(canon_decomp , compat_decomp , gencats ) = load_unicode_data ("UnicodeData.txt" )
196
- emit_decomp_module (rf , canon_decomp , compat_decomp )
197
238
emit_property_module (rf , "general_category" , gencats )
198
239
240
+ #emit_decomp_module(rf, canon_decomp, compat_decomp)
241
+
199
242
derived = load_derived_core_properties ("DerivedCoreProperties.txt" )
200
243
emit_property_module (rf , "derived_property" , derived )
0 commit comments