3434
3535#![allow(missing_docs, non_upper_case_globals, non_snake_case)]
3636
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+ }
3847'''
3948
4049UNICODE_VERSION = (13 , 0 , 0 )
@@ -239,7 +248,21 @@ def emit_enums(f, script_list, extension_list, longforms):
239248 f .write (" /// %s\n pub const %s: ScriptExtension = %s;\n " % (longform , name , expr ))
240249 f .write ("""}
241250
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 ("""
243266 #[inline]
244267 pub(crate) fn inner_full_name(self) -> &'static str {
245268 match self {
@@ -251,7 +274,26 @@ def emit_enums(f, script_list, extension_list, longforms):
251274 f .write (" Script::%s => \" %s\" ,\n " % (longforms [script ], longforms [script ]))
252275 f .write (""" }
253276 }
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+ """ )
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+ """ )
254294
295+ # Generate impl of `inner_short_name`
296+ f .write ("""
255297 #[inline]
256298 pub(crate) fn inner_short_name(self) -> &'static str {
257299 match self {
@@ -263,7 +305,25 @@ def emit_enums(f, script_list, extension_list, longforms):
263305 f .write (" Script::%s => \" %s\" ,\n " % (longforms [script ], script ))
264306 f .write (""" }
265307 }
308+ """ )
266309
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 ("""
267327 #[inline]
268328 pub(crate) fn for_integer(value: u8) -> Self {
269329 match value {
@@ -273,6 +333,10 @@ def emit_enums(f, script_list, extension_list, longforms):
273333 f .write (""" _ => unreachable!(),
274334 }
275335 }
336+ """ )
337+
338+ # Close `impl Script` section
339+ f .write ("""
276340}
277341""" )
278342
@@ -281,8 +345,6 @@ def extension_name(ext):
281345 return "script_extensions::%s" % "_" .join ([e .upper () for e in ext ])
282346
283347
284-
285-
286348if __name__ == "__main__" :
287349 r = "tables.rs"
288350 if os .path .exists (r ):
@@ -336,3 +398,5 @@ def extension_name(ext):
336398 is_pub = False , pfun = lambda x : "(%s,%s,%s)" % (escape_char (x [0 ]), escape_char (x [1 ]), extension_name (x [2 ])))
337399
338400 # emit_table(rf, "FOObar", properties)
401+
402+ rf .write (ending )
0 commit comments