34
34
35
35
#![allow(missing_docs, non_upper_case_globals, non_snake_case)]
36
36
37
- use super::ScriptExtension;
37
+ pub use tables_impl::*;
38
+
39
+ #[rustfmt::skip]
40
+ mod tables_impl {
41
+ use crate::ScriptExtension;
42
+ '''
43
+
44
+ # Close `mod impl {`
45
+ ending = '''
46
+ }
38
47
'''
39
48
40
49
UNICODE_VERSION = (13 , 0 , 0 )
@@ -239,7 +248,21 @@ def emit_enums(f, script_list, extension_list, longforms):
239
248
f .write (" /// %s\n pub const %s: ScriptExtension = %s;\n " % (longform , name , expr ))
240
249
f .write ("""}
241
250
242
- impl Script {
251
+ """ )
252
+
253
+ # Generate implementation for the `Script`
254
+ generate_script_impl (f )
255
+
256
+
257
+ def generate_script_impl (f ):
258
+ """Generates an `impl Script { ... }` section with all the required functions"""
259
+
260
+ # Open `impl Script` section.
261
+ f .write ("""impl Script {
262
+ """ )
263
+
264
+ # Generate impl of `inner_full_name`.
265
+ f .write ("""
243
266
#[inline]
244
267
pub(crate) fn inner_full_name(self) -> &'static str {
245
268
match self {
@@ -251,7 +274,26 @@ def emit_enums(f, script_list, extension_list, longforms):
251
274
f .write (" Script::%s => \" %s\" ,\n " % (longforms [script ], longforms [script ]))
252
275
f .write (""" }
253
276
}
277
+ """ )
278
+
279
+ # Generate impl of `inner_from_full_name`.
280
+ f .write ("""
281
+ #[inline]
282
+ pub(crate) fn inner_from_full_name(input: &str) -> Option<Self> {
283
+ match input {
284
+ "Unknown" => Some(Script::Unknown),
285
+ "Common" => Some(Script::Common),
286
+ "Inherited" => Some(Script::Inherited),
287
+ """ )
10000
288
+ for script in script_list :
289
+ f .write (" \" %s\" => Some(Script::%s),\n " % (longforms [script ], longforms [script ]))
290
+ f .write (" _ => None,\n " )
291
+ f .write (""" }
292
+ }
293
+ """ )
254
294
295
+ # Generate impl of `inner_short_name`
296
+ f .write ("""
255
297
#[inline]
256
298
pub(crate) fn inner_short_name(self) -> &'static str {
257
299
match self {
@@ -263,7 +305,25 @@ def emit_enums(f, script_list, extension_list, longforms):
263
305
f .write (" Script::%s => \" %s\" ,\n " % (longforms [script ], script ))
264
306
f .write (""" }
265
307
}
308
+ """ )
266
309
310
+ # Generate impl of `inner_from_short_name`
311
+ f .write ("""
312
+ #[inline]
313
+ pub(crate) fn inner_from_short_name(input: &str) -> Option<Self> {
314
+ match input {
315
+ "Zyyy" => Some(Script::Common),
316
+ "Zinh" => Some(Script::Inherited),
317
+ """ )
318
+ for script in script_list :
319
+ f .write (" \" %s\" => Some(Script::%s),\n " % (script , longforms [script ]))
320
+ f .write (""" _ => None,\n """ )
321
+ f .write (""" }
322
+ }
323
+ """ )
324
+
325
+ # Generate impl of `for_integer`
326
+ f .write ("""
267
327
#[inline]
268
328
pub(crate) fn for_integer(value: u8) -> Self {
269
329
match value {
@@ -273,6 +333,10 @@ def emit_enums(f, script_list, extension_list, longforms):
273
333
f .write (""" _ => unreachable!(),
274
334
}
275
335
}
336
+ """ )
337
+
338
+ # Close `impl Script` section
339
<
57AE
/td>+ f .write ("""
276
340
}
277
341
""" )
278
342
@@ -281,8 +345,6 @@ def extension_name(ext):
281
345
return "script_extensions::%s" % "_" .join ([e .upper () for e in ext ])
282
346
283
347
284
-
285
-
286
348
if __name__ == "__main__" :
287
349
r = "tables.rs"
288
350
if os .path .exists (r ):
@@ -336,3 +398,5 @@ def extension_name(ext):
336
398
is_pub = False , pfun = lambda x : "(%s,%s,%s)" % (escape_char (x [0 ]), escape_char (x [1 ]), extension_name (x [2 ])))
337
399
338
400
# emit_table(rf, "FOObar", properties)
401
+
402
+ rf .write (ending )
0 commit comments