[gen-tag-table] Generate bytes instead of str in rust output (#6017)
diff --git a/src/gen-tag-table.py b/src/gen-tag-table.py
index f94a7f7..31f4c00 100755
--- a/src/gen-tag-table.py
+++ b/src/gen-tag-table.py
@@ -908,10 +908,22 @@
print ('use read_fonts::types::Tag;')
print ()
print ('pub(crate) struct LangTag {')
- print (" pub language: &'static str,")
+ print (' pub language: [u8; 4],')
print (' pub tag: Tag,')
print ('}')
print ()
+ print ('const fn lang(language: &[u8]) -> [u8; 4] {')
+ print (' let mut bytes = [0; 4];')
+ print (' let mut i = 0;')
+ print ()
+ print (' while i < language.len() {')
+ print (' bytes[i] = language[i];')
+ print (' i += 1;')
+ print (' }')
+ print ()
+ print (' bytes')
+ print ('}')
+ print ()
print ('use super::tag::{lang_matches, strncmp, subtag_matches};')
print ()
print ('#[rustfmt::skip]')
@@ -922,7 +934,7 @@
continue
commented_out = len (language) == 3 and len (tags) == 1 and language == tags[0].lower ()
for tag in tags:
- print ('%sLangTag { language: "%s", \ttag: %s },' % ('// ' if commented_out else ' ', language, hb_tag_rust (tag)), end='')
+ print ('%sLangTag { language: lang(b"%s"), \ttag: %s },' % ('// ' if commented_out else ' ', language, hb_tag_rust (tag)), end='')
print (' // ', end='')
bcp_47_name = bcp_47.names.get (language, '')
bcp_47_name_candidates = bcp_47_name.split ('\n')