blitz-pdf 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +61 -9
  2. package/THIRD_PARTY_NOTICES.md +20 -0
  3. package/dist/types.d.ts +2 -1
  4. package/dist/types.d.ts.map +1 -1
  5. package/licenses/Noto-OFL.txt +94 -0
  6. package/licenses/NotoCJK-OFL.txt +92 -0
  7. package/licenses/NotoEmoji-OFL.txt +93 -0
  8. package/licenses/Unifont-OFL.txt +90 -0
  9. package/licenses/font-sources.json +106 -0
  10. package/package.json +1 -1
  11. package/src/types.ts +2 -1
  12. package/vendor/README.md +43 -0
  13. package/vendor/blitz-paint/Cargo.toml +50 -0
  14. package/vendor/blitz-paint/LICENSE-APACHE +176 -0
  15. package/vendor/blitz-paint/LICENSE-MIT +23 -0
  16. package/vendor/blitz-paint/src/color.rs +66 -0
  17. package/vendor/blitz-paint/src/debug_overlay.rs +168 -0
  18. package/vendor/blitz-paint/src/filters.rs +40 -0
  19. package/vendor/blitz-paint/src/gradient.rs +536 -0
  20. package/vendor/blitz-paint/src/kurbo_css/css_box.rs +847 -0
  21. package/vendor/blitz-paint/src/kurbo_css/mod.rs +77 -0
  22. package/vendor/blitz-paint/src/kurbo_css/non_uniform_radii.rs +60 -0
  23. package/vendor/blitz-paint/src/layers.rs +95 -0
  24. package/vendor/blitz-paint/src/lib.rs +190 -0
  25. package/vendor/blitz-paint/src/render/background.rs +968 -0
  26. package/vendor/blitz-paint/src/render/border.rs +631 -0
  27. package/vendor/blitz-paint/src/render/box_shadow.rs +157 -0
  28. package/vendor/blitz-paint/src/render/clip_path.rs +492 -0
  29. package/vendor/blitz-paint/src/render/form_controls.rs +103 -0
  30. package/vendor/blitz-paint/src/render/mask.rs +144 -0
  31. package/vendor/blitz-paint/src/render.rs +1351 -0
  32. package/vendor/blitz-paint/src/sizing.rs +63 -0
  33. package/vendor/blitz-paint/src/text.rs +747 -0
  34. package/vendor/fontique/Cargo.toml +194 -0
  35. package/vendor/fontique/LICENSE-APACHE +201 -0
  36. package/vendor/fontique/LICENSE-MIT +25 -0
  37. package/vendor/fontique/README.md +54 -0
  38. package/vendor/fontique/examples/generic_families.rs +37 -0
  39. package/vendor/fontique/src/attributes.rs +42 -0
  40. package/vendor/fontique/src/backend/android.rs +218 -0
  41. package/vendor/fontique/src/backend/coretext.rs +206 -0
  42. package/vendor/fontique/src/backend/dwrite.rs +395 -0
  43. package/vendor/fontique/src/backend/fontconfig.rs +844 -0
  44. package/vendor/fontique/src/backend/mod.rs +75 -0
  45. package/vendor/fontique/src/charmap.rs +127 -0
  46. package/vendor/fontique/src/collection/mod.rs +1016 -0
  47. package/vendor/fontique/src/collection/query.rs +392 -0
  48. package/vendor/fontique/src/fallback.rs +293 -0
  49. package/vendor/fontique/src/family.rs +111 -0
  50. package/vendor/fontique/src/family_name.rs +153 -0
  51. package/vendor/fontique/src/font.rs +562 -0
  52. package/vendor/fontique/src/generic.rs +36 -0
  53. package/vendor/fontique/src/impl_fontconfig.rs +159 -0
  54. package/vendor/fontique/src/lib.rs +87 -0
  55. package/vendor/fontique/src/matching.rs +483 -0
  56. package/vendor/fontique/src/scan.rs +312 -0
  57. package/vendor/fontique/src/script.rs +271 -0
  58. package/vendor/fontique/src/source.rs +108 -0
  59. package/vendor/fontique/src/source_cache.rs +254 -0
  60. package/wasm/blitz_pdf_bg.wasm +0 -0
@@ -0,0 +1,312 @@
1
+ // Copyright 2024 the Parley Authors
2
+ // SPDX-License-Identifier: Apache-2.0 OR MIT
3
+
4
+ //! Scanning files and memory for fonts.
5
+
6
+ #![allow(dead_code, unused_imports)]
7
+
8
+ use super::{
9
+ family::{FamilyId, FamilyInfo},
10
+ family_name::{FamilyName, FamilyNameMap},
11
+ font::FontInfo,
12
+ };
13
+ use alloc::string::String;
14
+ use alloc::vec;
15
+ use hashbrown::HashMap;
16
+ use read_fonts::{
17
+ FileRef, FontRef, TableProvider as _,
18
+ tables::name,
19
+ types::{NameId, Tag},
20
+ };
21
+ use smallvec::SmallVec;
22
+ #[cfg(feature = "std")]
23
+ use {super::source::SourcePathMap, std::path::Path};
24
+
25
+ use alloc::vec::Vec;
26
+
27
+ #[cfg(feature = "std")]
28
+ /// Font collection generated by scanning the file system.
29
+ #[derive(Default)]
30
+ pub struct ScannedCollection {
31
+ pub family_names: FamilyNameMap,
32
+ pub postscript_names: HashMap<String, FamilyId>,
33
+ pub data_paths: SourcePathMap,
34
+ pub families: HashMap<FamilyId, FamilyInfo>,
35
+ }
36
+
37
+ #[cfg(feature = "std")]
38
+ impl ScannedCollection {
39
+ /// Creates a new collection by scanning the given paths for
40
+ /// font files.
41
+ pub fn from_paths(paths: impl IntoIterator<Item = impl AsRef<Path>>, max_depth: u32) -> Self {
42
+ scan_collection(paths, max_depth)
43
+ }
44
+ }
45
+
46
+ /// Font generated by scanning the file system or a memory buffer.
47
+ pub struct ScannedFont<'a> {
48
+ pub font: FontRef<'a>,
49
+ #[cfg(feature = "std")]
50
+ pub path: Option<&'a Path>,
51
+ pub index: u32,
52
+ pub name_table: name::Name<'a>,
53
+ }
54
+
55
+ impl<'a> ScannedFont<'a> {
56
+ /// Returns the name string for the given identifier.
57
+ pub fn english_or_first_name(&self, id: NameId) -> Option<name::NameString<'a>> {
58
+ english_or_first(&self.name_table, id)
59
+ }
60
+ }
61
+
62
+ #[cfg(feature = "std")]
63
+ /// Scans paths and invokes the given function for each font discovered.
64
+ pub fn scan_paths(
65
+ paths: impl IntoIterator<Item = impl AsRef<Path>>,
66
+ max_depth: u32,
67
+ mut f: impl FnMut(&ScannedFont<'_>),
68
+ ) {
69
+ for path in paths {
70
+ scan_path_impl(path.as_ref(), max_depth, &mut f, 0);
71
+ }
72
+ }
73
+
74
+ /// Scans a memory buffer and invokes the given function for each font
75
+ /// discovered.
76
+ pub fn scan_memory<'a>(buf: &'a [u8], mut f: impl FnMut(&ScannedFont<'a>)) {
77
+ #[allow(clippy::unit_arg)]
78
+ scan_memory_impl(buf, ScanMemoryPathType::default(), &mut f);
79
+ }
80
+
81
+ #[cfg(feature = "std")]
82
+ fn scan_collection(
83
+ paths: impl IntoIterator<Item = impl AsRef<Path>>,
84
+ max_depth: u32,
85
+ ) -> ScannedCollection {
86
+ let mut collection = ScannedCollection::default();
87
+ let mut families: HashMap<FamilyId, (FamilyName, SmallVec<[FontInfo; 4]>)> = HashMap::default();
88
+ let mut postscript_name = String::default();
89
+ let mut name_pool = vec![];
90
+ let mut names = vec![];
91
+ scan_paths(paths, max_depth, |scanned_font| {
92
+ let Some(path) = &scanned_font.path else {
93
+ return;
94
+ };
95
+ name_pool.append(&mut names);
96
+ postscript_name.clear();
97
+ if !all_names(
98
+ &scanned_font.name_table,
99
+ NameId::TYPOGRAPHIC_FAMILY_NAME,
100
+ &mut name_pool,
101
+ &mut names,
102
+ ) && !all_names(
103
+ &scanned_font.name_table,
104
+ NameId::FAMILY_NAME,
105
+ &mut name_pool,
106
+ &mut names,
107
+ ) {
108
+ return;
109
+ }
110
+ let postscript_chars = scanned_font
111
+ .english_or_first_name(NameId::POSTSCRIPT_NAME)
112
+ .map(|name| name.chars());
113
+ if let Some(chars) = postscript_chars {
114
+ postscript_name.extend(chars);
115
+ } else {
116
+ return;
117
+ }
118
+ let data = collection.data_paths.get_or_insert(path);
119
+ let Some(font) = FontInfo::from_font_ref(&scanned_font.font, data, scanned_font.index)
120
+ else {
121
+ return;
122
+ };
123
+ let [first_name, other_names @ ..] = names.as_slice() else {
124
+ return;
125
+ };
126
+ let name = collection.family_names.get_or_insert(first_name);
127
+ for other_name in other_names {
128
+ collection.family_names.add_alias(name.id(), other_name);
129
+ }
130
+ collection
131
+ .postscript_names
132
+ .insert(postscript_name.clone(), name.id());
133
+ families
134
+ .entry(name.id())
135
+ .or_insert_with(|| (name.clone(), SmallVec::default()))
136
+ .1
137
+ .push(font);
138
+ });
139
+ collection.families.extend(
140
+ families
141
+ .drain()
142
+ .map(|(id, (name, fonts))| (id, FamilyInfo::new(name, fonts))),
143
+ );
144
+ collection
145
+ }
146
+
147
+ #[cfg(feature = "std")]
148
+ fn scan_path_impl(
149
+ path: &Path,
150
+ max_depth: u32,
151
+ f: &mut impl FnMut(&ScannedFont<'_>),
152
+ depth: u32,
153
+ ) -> Option<()> {
154
+ let metadata = path.metadata().ok()?;
155
+ if metadata.is_dir() {
156
+ if depth > max_depth {
157
+ return None;
158
+ }
159
+ for entry in std::fs::read_dir(path).ok()?.filter_map(|entry| entry.ok()) {
160
+ scan_path_impl(entry.path().as_path(), max_depth, f, depth + 1);
161
+ }
162
+ } else {
163
+ let file = std::fs::File::open(path).ok()?;
164
+ let mapped = unsafe { memmap2::Mmap::map(&file) }.ok()?;
165
+ scan_memory_impl(&mapped, Some(path), f);
166
+ }
167
+ Some(())
168
+ }
169
+
170
+ #[cfg(feature = "std")]
171
+ type ScanMemoryPathType<'a> = Option<&'a Path>;
172
+
173
+ #[cfg(not(feature = "std"))]
174
+ type ScanMemoryPathType<'a> = ();
175
+
176
+ fn scan_memory_impl<'a>(
177
+ data: &'a [u8],
178
+ path: ScanMemoryPathType<'a>,
179
+ f: &mut impl FnMut(&ScannedFont<'a>),
180
+ ) -> Option<()> {
181
+ let font_file = FileRef::new(data).ok()?;
182
+ match font_file {
183
+ FileRef::Font(font) => {
184
+ scan_font(font, path, 0, f);
185
+ }
186
+ FileRef::Collection(collection) => {
187
+ for i in 0..collection.len() {
188
+ let Ok(font) = collection.get(i) else {
189
+ continue;
190
+ };
191
+ scan_font(font, path, i, f);
192
+ }
193
+ }
194
+ }
195
+ Some(())
196
+ }
197
+
198
+ fn scan_font<'a>(
199
+ font: FontRef<'a>,
200
+ #[allow(unused)] path: ScanMemoryPathType<'a>,
201
+ index: u32,
202
+ f: &mut impl FnMut(&ScannedFont<'a>),
203
+ ) -> Option<()> {
204
+ // We can't currently render hvgl fonts so reject them
205
+ if font.table_data(Tag::new(b"hvgl")).is_some() {
206
+ return None;
207
+ }
208
+ let name_table = font.name().ok()?;
209
+ f(&ScannedFont {
210
+ font,
211
+ #[cfg(feature = "std")]
212
+ path,
213
+ index,
214
+ name_table,
215
+ });
216
+ Some(())
217
+ }
218
+
219
+ fn all_names(
220
+ name_table: &name::Name<'_>,
221
+ id: NameId,
222
+ pool: &mut Vec<String>,
223
+ result: &mut Vec<String>,
224
+ ) -> bool {
225
+ // Find the "English or first" name first. We'll use that as the default
226
+ // name.
227
+ let mut best_index = 0;
228
+ let mut best_rank = -1;
229
+ let mut best_record = None;
230
+ for (i, record) in name_table
231
+ .name_record()
232
+ .iter()
233
+ .enumerate()
234
+ .filter(|x| x.1.name_id() == id)
235
+ {
236
+ let rank = match (i, record.language_id()) {
237
+ (_, 0x0409) => {
238
+ best_index = i;
239
+ best_record = Some(record);
240
+ break;
241
+ }
242
+ (_, 0) => 2,
243
+ (0, _) => 1,
244
+ _ => continue,
245
+ };
246
+ if rank > best_rank {
247
+ best_rank = rank;
248
+ best_index = i;
249
+ best_record = Some(record);
250
+ }
251
+ }
252
+ // Add the "best" name first
253
+ if let Some(best) = best_record.and_then(|rec| rec.string(name_table.string_data()).ok()) {
254
+ let mut str = pool.pop().unwrap_or_default();
255
+ str.clear();
256
+ str.extend(best.chars());
257
+ if !str.is_empty() {
258
+ result.push(str);
259
+ } else {
260
+ pool.push(str);
261
+ }
262
+ }
263
+ // And then the rest
264
+ for (i, record) in name_table
265
+ .name_record()
266
+ .iter()
267
+ .enumerate()
268
+ .filter(|x| x.1.name_id() == id)
269
+ {
270
+ if best_record.is_some() && i == best_index {
271
+ continue;
272
+ }
273
+ let Ok(name_str) = record.string(name_table.string_data()) else {
274
+ continue;
275
+ };
276
+ let mut str = pool.pop().unwrap_or_default();
277
+ str.clear();
278
+ str.extend(name_str.chars());
279
+ if !str.is_empty() {
280
+ result.push(str);
281
+ } else {
282
+ pool.push(str);
283
+ }
284
+ }
285
+ !result.is_empty()
286
+ }
287
+
288
+ fn english_or_first<'a>(names: &name::Name<'a>, id: NameId) -> Option<name::NameString<'a>> {
289
+ let mut best_rank = -1;
290
+ let mut best_record = None;
291
+ for (i, record) in names
292
+ .name_record()
293
+ .iter()
294
+ .enumerate()
295
+ .filter(|x| x.1.name_id() == id)
296
+ {
297
+ let rank = match (i, record.language_id()) {
298
+ (_, 0x0409) => {
299
+ best_record = Some(record);
300
+ break;
301
+ }
302
+ (_, 0) => 2,
303
+ (0, _) => 1,
304
+ _ => continue,
305
+ };
306
+ if rank > best_rank {
307
+ best_rank = rank;
308
+ best_record = Some(record);
309
+ }
310
+ }
311
+ best_record.and_then(|record| record.string(names.string_data()).ok())
312
+ }
@@ -0,0 +1,271 @@
1
+ // Copyright 2024 the Parley Authors
2
+ // SPDX-License-Identifier: Apache-2.0 OR MIT
3
+
4
+ //! Support for working with Unicode scripts.
5
+
6
+ use parlance::Script;
7
+
8
+ pub trait ScriptExt {
9
+ /// Returns a mapping of scripts to sample text.
10
+ fn all_samples() -> &'static [(Script, &'static str)];
11
+
12
+ /// Returns a string containing sample characters for this script.
13
+ fn sample(&self) -> Option<&'static str>;
14
+ }
15
+
16
+ impl ScriptExt for Script {
17
+ fn all_samples() -> &'static [(Self, &'static str)] {
18
+ SCRIPT_SAMPLES
19
+ }
20
+
21
+ fn sample(&self) -> Option<&'static str> {
22
+ let ix = SCRIPT_SAMPLES
23
+ .binary_search_by(|entry| entry.0.cmp(self))
24
+ .ok()?;
25
+ SCRIPT_SAMPLES.get(ix).map(|entry| entry.1)
26
+ }
27
+ }
28
+
29
+ #[test]
30
+ fn assert_sorted() {
31
+ for w in SCRIPT_SAMPLES.windows(2) {
32
+ let &[prev, curr] = w else { unreachable!() };
33
+ assert!(prev.0 < curr.0);
34
+ }
35
+ }
36
+
37
+ pub const SCRIPT_SAMPLES: &[(Script, &str)] = &[
38
+ (Script::from_bytes(*b"Adlm"), "𞤀𞤁𞤂𞤃𞤄𞤅𞤆𞤇𞤈𞤉𞤊𞤋𞤌𞤍𞤎𞤏"),
39
+ (Script::from_bytes(*b"Aghb"), "𐔰𐔱𐔲𐔳𐔴𐔵𐔶𐔷𐔸𐔹𐔺𐔻𐔼𐔽𐔾𐔿"),
40
+ (Script::from_bytes(*b"Ahom"), "𑜀𑜁𑜂𑜃𑜄𑜅𑜆𑜇𑜈𑜉𑜊𑜋𑜌𑜍𑜎𑜏"),
41
+ (
42
+ Script::from_bytes(*b"Arab"),
43
+ "\u{600}\u{601}\u{602}\u{603}\u{604}؆؇؈؉؊؋؍؎؏\u{610}\u{611}",
44
+ ),
45
+ (Script::from_bytes(*b"Armi"), "𐡀𐡁𐡂𐡃𐡄𐡅𐡆𐡇𐡈𐡉𐡊𐡋𐡌𐡍𐡎𐡏"),
46
+ (Script::from_bytes(*b"Armn"), "ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀ"),
47
+ (Script::from_bytes(*b"Avst"), "𐬀𐬁𐬂𐬃𐬄𐬅𐬆𐬇𐬈𐬉𐬊𐬋𐬌𐬍𐬎𐬏"),
48
+ (
49
+ Script::from_bytes(*b"Bali"),
50
+ "\u{1b00}\u{1b01}\u{1b02}\u{1b03}ᬄᬅᬆᬇᬈᬉᬊᬋᬌᬍᬎᬏ",
51
+ ),
52
+ (Script::from_bytes(*b"Bamu"), "ꚠꚡꚢꚣꚤꚥꚦꚧꚨꚩꚪꚫꚬꚭꚮꚯ"),
53
+ (Script::from_bytes(*b"Bass"), "𖫐𖫑𖫒𖫓𖫔𖫕𖫖𖫗𖫘𖫙𖫚𖫛𖫜𖫝𖫞𖫟"),
54
+ (Script::from_bytes(*b"Batk"), "ᯀᯁᯂᯃᯄᯅᯆᯇᯈᯉᯊᯋᯌᯍᯎᯏ"),
55
+ (Script::from_bytes(*b"Beng"), "ঀ\u{981}ংঃঅআইঈউঊঋঌএঐওঔ"),
56
+ (Script::from_bytes(*b"Bhks"), "𑰀𑰁𑰂𑰃𑰄𑰅𑰆𑰇𑰈𑰊𑰋𑰌𑰍𑰎𑰏𑰐"),
57
+ (
58
+ Script::from_bytes(*b"Bopo"),
59
+ "˪˫ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒ",
60
+ ),
61
+ (Script::from_bytes(*b"Brah"), "𑀀\u{11001}𑀂𑀃𑀄𑀅𑀆𑀇𑀈𑀉𑀊𑀋𑀌𑀍𑀎𑀏"),
62
+ (Script::from_bytes(*b"Brai"), "⠀⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏"),
63
+ (Script::from_bytes(*b"Bugi"), "ᨀᨁᨂᨃᨄᨅᨆᨇᨈᨉᨊᨋᨌᨍᨎᨏ"),
64
+ (Script::from_bytes(*b"Buhd"), "ᝀᝁᝂᝃᝄᝅᝆᝇᝈᝉᝊᝋᝌᝍᝎᝏ"),
65
+ (
66
+ Script::from_bytes(*b"Cakm"),
67
+ "\u{11100}\u{11101}\u{11102}𑄃𑄄𑄅𑄆𑄇𑄈𑄉𑄊𑄋𑄌𑄍𑄎𑄏",
68
+ ),
69
+ (Script::from_bytes(*b"Cans"), "᐀ᐁᐂᐃᐄᐅᐆᐇᐈᐉᐊᐋᐌᐍᐎᐏ"),
70
+ (Script::from_bytes(*b"Cari"), "𐊠𐊡𐊢𐊣𐊤𐊥𐊦𐊧𐊨𐊩𐊪𐊫𐊬𐊭𐊮𐊯"),
71
+ (Script::from_bytes(*b"Cham"), "ꨀꨁꨂꨃꨄꨅꨆꨇꨈꨉꨊꨋꨌꨍꨎꨏ"),
72
+ (Script::from_bytes(*b"Cher"), "ᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯ"),
73
+ (Script::from_bytes(*b"Chrs"), "𐾰𐾱𐾲𐾳𐾴𐾵𐾶𐾷𐾸𐾹𐾺𐾻𐾼𐾽𐾾𐾿"),
74
+ (Script::from_bytes(*b"Copt"), "ϢϣϤϥϦϧϨϩϪϫϬϭϮϯⲀⲁ"),
75
+ (Script::from_bytes(*b"Cpmn"), "𒾐𒾑𒾒𒾓𒾔𒾕𒾖𒾗𒾘𒾙𒾚𒾛𒾜𒾝𒾞𒾟"),
76
+ (Script::from_bytes(*b"Cprt"), "𐠀𐠁𐠂𐠃𐠄𐠅𐠈𐠊𐠋𐠌𐠍𐠎𐠏𐠐𐠑𐠒"),
77
+ (Script::from_bytes(*b"Cyrl"), "ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏ"),
78
+ (
79
+ Script::from_bytes(*b"Deva"),
80
+ "\u{900}\u{901}\u{902}ःऄअआइईउऊऋऌऍऎए",
81
+ ),
82
+ (Script::from_bytes(*b"Diak"), "𑤀𑤁𑤂𑤃𑤄𑤅𑤆𑤉𑤌𑤍𑤎𑤏𑤐𑤑𑤒𑤓"),
83
+ (Script::from_bytes(*b"Dogr"), "𑠀𑠁𑠂𑠃𑠄𑠅𑠆𑠇𑠈𑠉𑠊𑠋𑠌𑠍𑠎𑠏"),
84
+ (Script::from_bytes(*b"Dsrt"), "𐐀𐐁𐐂𐐃𐐄𐐅𐐆𐐇𐐈𐐉𐐊𐐋𐐌𐐍𐐎𐐏"),
85
+ (Script::from_bytes(*b"Dupl"), "𛰀𛰁𛰂𛰃𛰄𛰅𛰆𛰇𛰈𛰉𛰊𛰋𛰌𛰍𛰎𛰏"),
86
+ (Script::from_bytes(*b"Egyp"), "𓀀𓀁𓀂𓀃𓀄𓀅𓀆𓀇𓀈𓀉𓀊𓀋𓀌𓀍𓀎𓀏"),
87
+ (Script::from_bytes(*b"Elba"), "𐔀𐔁𐔂𐔃𐔄𐔅𐔆𐔇𐔈𐔉𐔊𐔋𐔌𐔍𐔎𐔏"),
88
+ (Script::from_bytes(*b"Elym"), "𐿠𐿡𐿢𐿣𐿤𐿥𐿦𐿧𐿨𐿩𐿪𐿫𐿬𐿭𐿮𐿯"),
89
+ (Script::from_bytes(*b"Ethi"), "ሀሁሂሃሄህሆሇለሉሊላሌልሎሏ"),
90
+ (Script::from_bytes(*b"Geor"), "ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯ"),
91
+ (Script::from_bytes(*b"Glag"), "ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏ"),
92
+ (Script::from_bytes(*b"Gong"), "𑵠𑵡𑵢𑵣𑵤𑵥𑵧𑵨𑵪𑵫𑵬𑵭𑵮𑵯𑵰𑵱"),
93
+ (Script::from_bytes(*b"Gonm"), "𑴀𑴁𑴂𑴃𑴄𑴅𑴆𑴈𑴉𑴋𑴌𑴍𑴎𑴏𑴐𑴑"),
94
+ (Script::from_bytes(*b"Goth"), "𐌰𐌱𐌲𐌳𐌴𐌵𐌶𐌷𐌸𐌹𐌺𐌻𐌼𐌽𐌾𐌿"),
95
+ (
96
+ Script::from_bytes(*b"Gran"),
97
+ "\u{11300}\u{11301}𑌂𑌃𑌅𑌆𑌇𑌈𑌉𑌊𑌋𑌌𑌏𑌐𑌓𑌔",
98
+ ),
99
+ (Script::from_bytes(*b"Grek"), "ͰͱͲͳ͵ͶͷͺͻͼͽͿ΄ΆΈΉ"),
100
+ (Script::from_bytes(*b"Gujr"), "\u{a81}\u{a82}ઃઅઆઇઈઉઊઋઌઍએઐઑઓ"),
101
+ (Script::from_bytes(*b"Guru"), "\u{a01}\u{a02}ਃਅਆਇਈਉਊਏਐਓਔਕਖਗ"),
102
+ (Script::from_bytes(*b"Hang"), "가"),
103
+ (Script::from_bytes(*b"Hani"), "今"),
104
+ (Script::from_bytes(*b"Hano"), "ᜠᜡᜢᜣᜤᜥᜦᜧᜨᜩᜪᜫᜬᜭᜮᜯ"),
105
+ (Script::from_bytes(*b"Hatr"), "𐣠𐣡𐣢𐣣𐣤𐣥𐣦𐣧𐣨𐣩𐣪𐣫𐣬𐣭𐣮𐣯"),
106
+ (
107
+ Script::from_bytes(*b"Hebr"),
108
+ "\u{591}\u{592}\u{593}\u{594}\u{595}\u{596}\u{597}\u{598}\u{599}\u{59a}\u{59b}\u{59c}\u{59d}\u{59e}\u{59f}\u{5a0}",
109
+ ),
110
+ (
111
+ Script::from_bytes(*b"Hira"),
112
+ "ぁあぃいぅうぇえぉおかがきぎくぐ",
113
+ ),
114
+ (Script::from_bytes(*b"Hluw"), "𔐀𔐁𔐂𔐃𔐄𔐅𔐆𔐇𔐈𔐉𔐊𔐋𔐌𔐍𔐎𔐏"),
115
+ (Script::from_bytes(*b"Hmng"), "𖬀𖬁𖬂𖬃𖬄𖬅𖬆𖬇𖬈𖬉𖬊𖬋𖬌𖬍𖬎𖬏"),
116
+ (Script::from_bytes(*b"Hmnp"), "𞄀𞄁𞄂𞄃𞄄𞄅𞄆𞄇𞄈𞄉𞄊𞄋𞄌𞄍𞄎𞄏"),
117
+ (Script::from_bytes(*b"Hung"), "𐲀𐲁𐲂𐲃𐲄𐲅𐲆𐲇𐲈𐲉𐲊𐲋𐲌𐲍𐲎𐲏"),
118
+ (Script::from_bytes(*b"Ital"), "𐌀𐌁𐌂𐌃𐌄𐌅𐌆𐌇𐌈𐌉𐌊𐌋𐌌𐌍𐌎𐌏"),
119
+ (
120
+ Script::from_bytes(*b"Java"),
121
+ "\u{a980}\u{a981}\u{a982}ꦃꦄꦅꦆꦇꦈꦉꦊꦋꦌꦍꦎꦏ",
122
+ ),
123
+ (Script::from_bytes(*b"Kali"), "꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉ꤊꤋꤌꤍꤎꤏ"),
124
+ (
125
+ Script::from_bytes(*b"Kana"),
126
+ "ァアィイゥウェエォオカガキギクグ",
127
+ ),
128
+ (
129
+ Script::from_bytes(*b"Kawi"),
130
+ "\u{11f00}\u{11f01}𑼂𑼃𑼄𑼅𑼆𑼇𑼈𑼉𑼊𑼋𑼌𑼍𑼎𑼏",
131
+ ),
132
+ (
133
+ Script::from_bytes(*b"Khar"),
134
+ "𐨀\u{10a01}\u{10a02}\u{10a03}\u{10a05}\u{10a06}\u{10a0c}\u{10a0d}\u{10a0e}\u{10a0f}𐨐𐨑𐨒𐨓𐨕𐨖",
135
+ ),
136
+ (Script::from_bytes(*b"Khmr"), "កខគឃងចឆជឈញដឋឌឍណត"),
137
+ (Script::from_bytes(*b"Khoj"), "𑈀𑈁𑈂𑈃𑈄𑈅𑈆𑈇𑈈𑈉𑈊𑈋𑈌𑈍𑈎𑈏"),
138
+ (
139
+ Script::from_bytes(*b"Kits"),
140
+ "\u{16fe4}𘬀𘬁𘬂𘬃𘬄𘬅𘬆𘬇𘬈𘬉𘬊𘬋𘬌𘬍𘬎",
141
+ ),
142
+ (Script::from_bytes(*b"Knda"), "ಀ\u{c81}ಂಃ಄ಅಆಇಈಉಊಋಌಎಏಐ"),
143
+ (
144
+ Script::from_bytes(*b"Kthi"),
145
+ "\u{11080}\u{11081}𑂂𑂃𑂄𑂅𑂆𑂇𑂈𑂉𑂊𑂋𑂌𑂍𑂎𑂏",
146
+ ),
147
+ (Script::from_bytes(*b"Lana"), "ᨠᨡᨢᨣᨤᨥᨦᨧᨨᨩᨪᨫᨬᨭᨮᨯ"),
148
+ (Script::from_bytes(*b"Laoo"), "ກຂຄຆງຈຉຊຌຍຎຏຐຑຒຓ"),
149
+ (Script::from_bytes(*b"Latn"), "abcdefgABCDEFG"),
150
+ (Script::from_bytes(*b"Lepc"), "ᰀᰁᰂᰃᰄᰅᰆᰇᰈᰉᰊᰋᰌᰍᰎᰏ"),
151
+ (Script::from_bytes(*b"Limb"), "ᤀᤁᤂᤃᤄᤅᤆᤇᤈᤉᤊᤋᤌᤍᤎᤏ"),
152
+ (Script::from_bytes(*b"Lina"), "𐘀𐘁𐘂𐘃𐘄𐘅𐘆𐘇𐘈𐘉𐘊𐘋𐘌𐘍𐘎𐘏"),
153
+ (Script::from_bytes(*b"Linb"), "𐀀𐀁𐀂𐀃𐀄𐀅𐀆𐀇𐀈𐀉𐀊𐀋𐀍𐀎𐀏𐀐"),
154
+ (Script::from_bytes(*b"Lisu"), "ꓐꓑꓒꓓꓔꓕꓖꓗꓘꓙꓚꓛꓜꓝꓞꓟ"),
155
+ (Script::from_bytes(*b"Lyci"), "𐊀𐊁𐊂𐊃𐊄𐊅𐊆𐊇𐊈𐊉𐊊𐊋𐊌𐊍𐊎𐊏"),
156
+ (Script::from_bytes(*b"Lydi"), "𐤠𐤡𐤢𐤣𐤤𐤥𐤦𐤧𐤨𐤩𐤪𐤫𐤬𐤭𐤮𐤯"),
157
+ (Script::from_bytes(*b"Mahj"), "𑅐𑅑𑅒𑅓𑅔𑅕𑅖𑅗𑅘𑅙𑅚𑅛𑅜𑅝𑅞𑅟"),
158
+ (Script::from_bytes(*b"Maka"), "𑻠𑻡𑻢𑻣𑻤𑻥𑻦𑻧𑻨𑻩𑻪𑻫𑻬𑻭𑻮𑻯"),
159
+ (Script::from_bytes(*b"Mand"), "ࡀࡁࡂࡃࡄࡅࡆࡇࡈࡉࡊࡋࡌࡍࡎࡏ"),
160
+ (Script::from_bytes(*b"Mani"), "𐫀𐫁𐫂𐫃𐫄𐫅𐫆𐫇𐫈𐫉𐫊𐫋𐫌𐫍𐫎𐫏"),
161
+ (Script::from_bytes(*b"Marc"), "𑱰𑱱𑱲𑱳𑱴𑱵𑱶𑱷𑱸𑱹𑱺𑱻𑱼𑱽𑱾𑱿"),
162
+ (Script::from_bytes(*b"Medf"), "𖹀𖹁𖹂𖹃𖹄𖹅𖹆𖹇𖹈𖹉𖹊𖹋𖹌𖹍𖹎𖹏"),
163
+ (Script::from_bytes(*b"Mend"), "𞠀𞠁𞠂𞠃𞠄𞠅𞠆𞠇𞠈𞠉𞠊𞠋𞠌𞠍𞠎𞠏"),
164
+ (Script::from_bytes(*b"Merc"), "𐦠𐦡𐦢𐦣𐦤𐦥𐦦𐦧𐦨𐦩𐦪𐦫𐦬𐦭𐦮𐦯"),
165
+ (Script::from_bytes(*b"Mero"), "𐦀𐦁𐦂𐦃𐦄𐦅𐦆𐦇𐦈𐦉𐦊𐦋𐦌𐦍𐦎𐦏"),
166
+ (Script::from_bytes(*b"Mlym"), "\u{d00}\u{d01}ംഃഄഅആഇഈഉഊഋഌഎഏഐ"),
167
+ (Script::from_bytes(*b"Modi"), "𑘀𑘁𑘂𑘃𑘄𑘅𑘆𑘇𑘈𑘉𑘊𑘋𑘌𑘍𑘎𑘏"),
168
+ (
169
+ Script::from_bytes(*b"Mong"),
170
+ "᠀᠁᠄᠆᠇᠈᠉᠊\u{180b}\u{180c}\u{180d}\u{180e}\u{180f}᠐᠑᠒",
171
+ ),
172
+ (Script::from_bytes(*b"Mroo"), "𖩀𖩁𖩂𖩃𖩄𖩅𖩆𖩇𖩈𖩉𖩊𖩋𖩌𖩍𖩎𖩏"),
173
+ (
174
+ Script::from_bytes(*b"Mtei"),
175
+ "ꫠꫡꫢꫣꫤꫥꫦꫧꫨꫩꫪꫫ\u{aaec}\u{aaed}ꫮꫯ",
176
+ ),
177
+ (Script::from_bytes(*b"Mult"), "𑊀𑊁𑊂𑊃𑊄𑊅𑊆𑊈𑊊𑊋𑊌𑊍𑊏𑊐𑊑𑊒"),
178
+ (Script::from_bytes(*b"Mymr"), "ကခဂဃငစဆဇဈဉညဋဌဍဎဏ"),
179
+ (Script::from_bytes(*b"Nagm"), "𞓐𞓑𞓒𞓓𞓔𞓕𞓖𞓗𞓘𞓙𞓚𞓛𞓜𞓝𞓞𞓟"),
180
+ (Script::from_bytes(*b"Nand"), "𑦠𑦡𑦢𑦣𑦤𑦥𑦦𑦧𑦪𑦫𑦬𑦭𑦮𑦯𑦰𑦱"),
181
+ (Script::from_bytes(*b"Narb"), "𐪀𐪁𐪂𐪃𐪄𐪅𐪆𐪇𐪈𐪉𐪊𐪋𐪌𐪍𐪎𐪏"),
182
+ (Script::from_bytes(*b"Nbat"), "𐢀𐢁𐢂𐢃𐢄𐢅𐢆𐢇𐢈𐢉𐢊𐢋𐢌𐢍𐢎𐢏"),
183
+ (Script::from_bytes(*b"Newa"), "𑐀𑐁𑐂𑐃𑐄𑐅𑐆𑐇𑐈𑐉𑐊𑐋𑐌𑐍𑐎𑐏"),
184
+ (Script::from_bytes(*b"Nkoo"), "߀߁߂߃߄߅߆߇߈߉ߊߋߌߍߎߏ"),
185
+ (
186
+ Script::from_bytes(*b"Nshu"),
187
+ "𖿡𛅰𛅱𛅲𛅳𛅴𛅵𛅶𛅷𛅸𛅹𛅺𛅻𛅼𛅽𛅾",
188
+ ),
189
+ (Script::from_bytes(*b"Ogam"), "\u{1680}ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏ"),
190
+ (Script::from_bytes(*b"Olck"), "᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙ᱚᱛᱜᱝᱞᱟ"),
191
+ (Script::from_bytes(*b"Orkh"), "𐰀𐰁𐰂𐰃𐰄𐰅𐰆𐰇𐰈𐰉𐰊𐰋𐰌𐰍𐰎𐰏"),
192
+ (Script::from_bytes(*b"Orya"), "\u{b01}ଂଃଅଆଇଈଉଊଋଌଏଐଓଔକ"),
193
+ (Script::from_bytes(*b"Osge"), "𐒰𐒱𐒲𐒳𐒴𐒵𐒶𐒷𐒸𐒹𐒺𐒻𐒼𐒽𐒾𐒿"),
194
+ (Script::from_bytes(*b"Osma"), "𐒀𐒁𐒂𐒃𐒄𐒅𐒆𐒇𐒈𐒉𐒊𐒋𐒌𐒍𐒎𐒏"),
195
+ (Script::from_bytes(*b"Ougr"), "𐽰𐽱𐽲𐽳𐽴𐽵𐽶𐽷𐽸𐽹𐽺𐽻𐽼𐽽𐽾𐽿"),
196
+ (Script::from_bytes(*b"Palm"), "𐡠𐡡𐡢𐡣𐡤𐡥𐡦𐡧𐡨𐡩𐡪𐡫𐡬𐡭𐡮𐡯"),
197
+ (Script::from_bytes(*b"Pauc"), "𑫀𑫁𑫂𑫃𑫄𑫅𑫆𑫇𑫈𑫉𑫊𑫋𑫌𑫍𑫎𑫏"),
198
+ (Script::from_bytes(*b"Perm"), "𐍐𐍑𐍒𐍓𐍔𐍕𐍖𐍗𐍘𐍙𐍚𐍛𐍜𐍝𐍞𐍟"),
199
+ (Script::from_bytes(*b"Phag"), "ꡀꡁꡂꡃꡄꡅꡆꡇꡈꡉꡊꡋꡌꡍꡎꡏ"),
200
+ (Script::from_bytes(*b"Phli"), "𐭠𐭡𐭢𐭣𐭤𐭥𐭦𐭧𐭨𐭩𐭪𐭫𐭬𐭭𐭮𐭯"),
201
+ (Script::from_bytes(*b"Phlp"), "𐮀𐮁𐮂𐮃𐮄𐮅𐮆𐮇𐮈𐮉𐮊𐮋𐮌𐮍𐮎𐮏"),
202
+ (Script::from_bytes(*b"Phnx"), "𐤀𐤁𐤂𐤃𐤄𐤅𐤆𐤇𐤈𐤉𐤊𐤋𐤌𐤍𐤎𐤏"),
203
+ (Script::from_bytes(*b"Plrd"), "𖼀𖼁𖼂𖼃𖼄𖼅𖼆𖼇𖼈𖼉𖼊𖼋𖼌𖼍𖼎𖼏"),
204
+ (Script::from_bytes(*b"Prti"), "𐭀𐭁𐭂𐭃𐭄𐭅𐭆𐭇𐭈𐭉𐭊𐭋𐭌𐭍𐭎𐭏"),
205
+ (Script::from_bytes(*b"Rjng"), "ꤰꤱꤲꤳꤴꤵꤶꤷꤸꤹꤺꤻꤼꤽꤾꤿ"),
206
+ (Script::from_bytes(*b"Rohg"), "𐴀𐴁𐴂𐴃𐴄𐴅𐴆𐴇𐴈𐴉𐴊𐴋𐴌𐴍𐴎𐴏"),
207
+ (Script::from_bytes(*b"Runr"), "ᚠᚡᚢᚣᚤᚥᚦᚧᚨᚩᚪᚫᚬᚭᚮᚯ"),
208
+ (Script::from_bytes(*b"Samr"), "ࠀࠁࠂࠃࠄࠅࠆࠇࠈࠉࠊࠋࠌࠍࠎࠏ"),
209
+ (Script::from_bytes(*b"Sarb"), "𐩠𐩡𐩢𐩣𐩤𐩥𐩦𐩧𐩨𐩩𐩪𐩫𐩬𐩭𐩮𐩯"),
210
+ (Script::from_bytes(*b"Saur"), "ꢀꢁꢂꢃꢄꢅꢆꢇꢈꢉꢊꢋꢌꢍꢎꢏ"),
211
+ (Script::from_bytes(*b"Sgnw"), "𝠀𝠁𝠂𝠃𝠄𝠅𝠆𝠇𝠈𝠉𝠊𝠋𝠌𝠍𝠎𝠏"),
212
+ (Script::from_bytes(*b"Shaw"), "𐑐𐑑𐑒𐑓𐑔𐑕𐑖𐑗𐑘𐑙𐑚𐑛𐑜𐑝𐑞𐑟"),
213
+ (
214
+ Script::from_bytes(*b"Shrd"),
215
+ "\u{11180}\u{11181}𑆂𑆃𑆄𑆅𑆆𑆇𑆈𑆉𑆊𑆋𑆌𑆍𑆎𑆏",
216
+ ),
217
+ (Script::from_bytes(*b"Sidd"), "𑖀𑖁𑖂𑖃𑖄𑖅𑖆𑖇𑖈𑖉𑖊𑖋𑖌𑖍𑖎𑖏"),
218
+ (Script::from_bytes(*b"Sind"), "𑊰𑊱𑊲𑊳𑊴𑊵𑊶𑊷𑊸𑊹𑊺𑊻𑊼𑊽𑊾𑊿"),
219
+ (Script::from_bytes(*b"Sinh"), "\u{d81}ංඃඅආඇඈඉඊඋඌඍඎඏඐඑ"),
220
+ (Script::from_bytes(*b"Sogd"), "𐼰𐼱𐼲𐼳𐼴𐼵𐼶𐼷𐼸𐼹𐼺𐼻𐼼𐼽𐼾𐼿"),
221
+ (Script::from_bytes(*b"Sogo"), "𐼀𐼁𐼂𐼃𐼄𐼅𐼆𐼇𐼈𐼉𐼊𐼋𐼌𐼍𐼎𐼏"),
222
+ (Script::from_bytes(*b"Sora"), "𑃐𑃑𑃒𑃓𑃔𑃕𑃖𑃗𑃘𑃙𑃚𑃛𑃜𑃝𑃞𑃟"),
223
+ (
224
+ Script::from_bytes(*b"Soyo"),
225
+ "𑩐\u{11a51}\u{11a52}\u{11a53}\u{11a54}\u{11a55}\u{11a56}𑩗𑩘\u{11a59}\u{11a5a}\u{11a5b}𑩜𑩝𑩞𑩟",
226
+ ),
227
+ (
228
+ Script::from_bytes(*b"Sund"),
229
+ "\u{1b80}\u{1b81}ᮂᮃᮄᮅᮆᮇᮈᮉᮊᮋᮌᮍᮎᮏ",
230
+ ),
231
+ (
232
+ Script::from_bytes(*b"Sylo"),
233
+ "ꠀꠁ\u{a802}ꠃꠄꠅ\u{a806}ꠇꠈꠉꠊ\u{a80b}ꠌꠍꠎꠏ",
234
+ ),
235
+ (Script::from_bytes(*b"Syrc"), "܀܁܂܃܄܅܆܇܈܉܊܋܌܍\u{70f}ܐ"),
236
+ (Script::from_bytes(*b"Tagb"), "ᝠᝡᝢᝣᝤᝥᝦᝧᝨᝩᝪᝫᝬᝮᝯᝰ"),
237
+ (Script::from_bytes(*b"Takr"), "𑚀𑚁𑚂𑚃𑚄𑚅𑚆𑚇𑚈𑚉𑚊𑚋𑚌𑚍𑚎𑚏"),
238
+ (Script::from_bytes(*b"Tale"), "ᥐᥑᥒᥓᥔᥕᥖᥗᥘᥙᥚᥛᥜᥝᥞᥟ"),
239
+ (Script::from_bytes(*b"Talu"), "ᦀᦁᦂᦃᦄᦅᦆᦇᦈᦉᦊᦋᦌᦍᦎᦏ"),
240
+ (Script::from_bytes(*b"Taml"), "\u{b82}ஃஅஆஇஈஉஊஎஏஐஒஓஔகங"),
241
+ (
242
+ Script::from_bytes(*b"Tang"),
243
+ "𖿠𗀀𗀁𗀂𗀃𗀄𗀅𗀆𗀇𗀈𗀉𗀊𗀋𗀌𗀍𗀎",
244
+ ),
245
+ (Script::from_bytes(*b"Tavt"), "ꪀꪁꪂꪃꪄꪅꪆꪇꪈꪉꪊꪋꪌꪍꪎꪏ"),
246
+ (Script::from_bytes(*b"Telu"), "\u{c00}ఁంః\u{c04}అఆఇఈఉఊఋఌఎఏఐ"),
247
+ (Script::from_bytes(*b"Tfng"), "ⴰⴱⴲⴳⴴⴵⴶⴷⴸⴹⴺⴻⴼⴽⴾⴿ"),
248
+ (Script::from_bytes(*b"Tglg"), "ᜀᜁᜂᜃᜄᜅᜆᜇᜈᜉᜊᜋᜌᜍᜎᜏ"),
249
+ (Script::from_bytes(*b"Thaa"), "ހށނރބޅކއވމފދތލގޏ"),
250
+ (Script::from_bytes(*b"Thai"), "กขฃคฅฆงจฉชซฌญฎฏฐ"),
251
+ (Script::from_bytes(*b"Tibt"), "ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏"),
252
+ (Script::from_bytes(*b"Tirh"), "𑒀𑒁𑒂𑒃𑒄𑒅𑒆𑒇𑒈𑒉𑒊𑒋𑒌𑒍𑒎𑒏"),
253
+ (Script::from_bytes(*b"Tnsa"), "𖩰𖩱𖩲𖩳𖩴𖩵𖩶𖩷𖩸𖩹𖩺𖩻𖩼𖩽𖩾𖩿"),
254
+ (Script::from_bytes(*b"Toto"), "𞊐𞊑𞊒𞊓𞊔𞊕𞊖𞊗𞊘𞊙𞊚𞊛𞊜𞊝𞊞𞊟"),
255
+ (Script::from_bytes(*b"Ugar"), "𐎀𐎁𐎂𐎃𐎄𐎅𐎆𐎇𐎈𐎉𐎊𐎋𐎌𐎍𐎎𐎏"),
256
+ (Script::from_bytes(*b"Vaii"), "ꔀꔁꔂꔃꔄꔅꔆꔇꔈꔉꔊꔋꔌꔍꔎꔏ"),
257
+ (Script::from_bytes(*b"Vith"), "𐕰𐕱𐕲𐕳𐕴𐕵𐕶𐕷𐕸𐕹𐕺𐕼𐕽𐕾𐕿𐖀"),
258
+ (Script::from_bytes(*b"Wara"), "𑢠𑢡𑢢𑢣𑢤𑢥𑢦𑢧𑢨𑢩𑢪𑢫𑢬𑢭𑢮𑢯"),
259
+ (Script::from_bytes(*b"Wcho"), "𞋀𞋁𞋂𞋃𞋄𞋅𞋆𞋇𞋈𞋉𞋊𞋋𞋌𞋍𞋎𞋏"),
260
+ (Script::from_bytes(*b"Xpeo"), "𐎠𐎡𐎢𐎣𐎤𐎥𐎦𐎧𐎨𐎩𐎪𐎫𐎬𐎭𐎮𐎯"),
261
+ (Script::from_bytes(*b"Xsux"), "𒀀𒀁𒀂𒀃𒀄𒀅𒀆𒀇𒀈𒀉𒀊𒀋𒀌𒀍𒀎𒀏"),
262
+ (Script::from_bytes(*b"Yezi"), "𐺀𐺁𐺂𐺃𐺄𐺅𐺆𐺇𐺈𐺉𐺊𐺋𐺌𐺍𐺎𐺏"),
263
+ (
264
+ Script::from_bytes(*b"Yiii"),
265
+ "ꀀꀁꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌꀍꀎꀏ",
266
+ ),
267
+ (
268
+ Script::from_bytes(*b"Zanb"),
269
+ "𑨀\u{11a01}\u{11a02}\u{11a03}\u{11a04}\u{11a05}\u{11a06}\u{11a07}\u{11a08}\u{11a09}\u{11a0a}𑨋𑨌𑨍𑨎𑨏",
270
+ ),
271
+ ];