diff --git a/README.md b/README.md index aa91c7a0..17fbb410 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are interested in helping the project checkout `rustybuzz` is a complete [harfbuzz](https://github.com/harfbuzz/harfbuzz)'s shaping algorithm port to Rust. -Matches `harfbuzz` v2.9.1 +Matches `harfbuzz` v4.0.1 ## Why? diff --git a/scripts/gen-universal-table.py b/scripts/gen-universal-table.py index 45ec2ffb..44b710db 100755 --- a/scripts/gen-universal-table.py +++ b/scripts/gen-universal-table.py @@ -34,7 +34,7 @@ headers[j - 1].append(line) headers.append(["UnicodeData.txt does not have a header."]) -data = [{} for _ in files] +unicode_data = [{} for _ in files] values = [{} for _ in files] for i, f in enumerate(files): for line in f: @@ -68,48 +68,23 @@ i0 = i if i < 7 else i - 7 for u in range(start, end + 1): - data[i0][u] = t + unicode_data[i0][u] = t values[i0][t] = values[i0].get(t, 0) + end - start + 1 defaults = ('Other', 'Not_Applicable', 'jt_X', '', 'Cn', 'No_Block', 'Unknown') -# TODO Characters that are not in Unicode Indic files, but used in USE -data[0][0x1B61] = defaults[0] -data[0][0x1B63] = defaults[0] -data[0][0x1B64] = defaults[0] -data[0][0x1B65] = defaults[0] -data[0][0x1B66] = defaults[0] -data[0][0x1B67] = defaults[0] -data[0][0x1B69] = defaults[0] -data[0][0x1B6A] = defaults[0] -data[0][0x2060] = defaults[0] -# TODO https://github.com/harfbuzz/harfbuzz/pull/1685 -data[0][0x1B5B] = 'Consonant_Placeholder' -data[0][0x1B5C] = 'Consonant_Placeholder' -data[0][0x1B5F] = 'Consonant_Placeholder' -data[0][0x1B62] = 'Consonant_Placeholder' -data[0][0x1B68] = 'Consonant_Placeholder' -# TODO https://github.com/harfbuzz/harfbuzz/issues/1035 -data[0][0x11C44] = 'Consonant_Placeholder' -data[0][0x11C45] = 'Consonant_Placeholder' -# TODO https://github.com/harfbuzz/harfbuzz/pull/1399 -data[0][0x111C8] = 'Consonant_Placeholder' - # Merge data into one dict: -for i, v in enumerate(defaults): - values[i][v] = values[i].get(v, 0) + 1 +for i,v in enumerate (defaults): + values[i][v] = values[i].get (v, 0) + 1 combined = {} -for i, d in enumerate(data): - for u, v in d.items(): +for i,d in enumerate (unicode_data): + for u,v in d.items (): if not u in combined: if i >= 4: continue - combined[u] = list(defaults) + combined[u] = list (defaults) combined[u][i] = v -combined = {k: v for k, v in combined.items( -) if v[6] not in DISABLED_SCRIPTS} -data = combined -del combined +combined = {k: v for k, v in combined.items() if v[6] not in DISABLED_SCRIPTS} property_names = [ @@ -234,8 +209,8 @@ def is_BASE_OTHER(U, UISC, UDI, UGC, AJT): def is_CGJ(U, UISC, UDI, UGC, AJT): - # Also includes VARIATION_SELECTOR, WJ, and ZWJ - return U == 0x200D or UDI and UGC in [Mc, Me, Mn] + # Also includes VARIATION_SELECTOR and ZWJ + return UISC == Joiner or UDI and UGC in [Mc, Me, Mn] def is_CONS_FINAL(U, UISC, UDI, UGC, AJT): @@ -303,12 +278,13 @@ def is_ZWNJ(U, UISC, UDI, UGC, AJT): def is_OTHER(U, UISC, UDI, UGC, AJT): - # Also includes BASE_IND, Rsv, and SYM - return ((UGC in [Cn, Po] or UISC in [Consonant_Dead, Joiner, Modifying_Letter, Other]) + # Also includes BASE_IND, and SYM + return ((UGC == Po or UISC in [Consonant_Dead, Joiner, Modifying_Letter, Other]) and not is_BASE(U, UISC, UDI, UGC, AJT) and not is_BASE_OTHER(U, UISC, UDI, UGC, AJT) and not is_CGJ(U, UISC, UDI, UGC, AJT) and not is_SYM_MOD(U, UISC, UDI, UGC, AJT) + and not is_Word_Joiner(U, UISC, UDI, UGC, AJT) ) @@ -326,16 +302,20 @@ def is_SYM_MOD(U, UISC, UDI, UGC, AJT): def is_VOWEL(U, UISC, UDI, UGC, AJT): - # https://github.com/harfbuzz/harfbuzz/issues/376 return (UISC == Pure_Killer or - (UGC != Lo and UISC in [Vowel, Vowel_Dependent] and U not in [0xAA29])) + UGC != Lo and UISC in [Vowel, Vowel_Dependent]) def is_VOWEL_MOD(U, UISC, UDI, UGC, AJT): - # https://github.com/harfbuzz/harfbuzz/issues/376 return (UISC in [Tone_Mark, Cantillation_Mark, Register_Shifter, Visarga] or - (UGC != Lo and (UISC == Bindu or U in [0xAA29]))) + UGC != Lo and UISC == Bindu) +def is_Word_Joiner(U, UISC, UDI, UGC, AJT): + # Also includes Rsv + return (UDI and U not in [0x115F, 0x1160, 0x3164, 0xFFA0, 0x1BCA0, 0x1BCA1, 0x1BCA2, 0x1BCA3] + and UISC == Other + and not is_CGJ(U, UISC, UDI, UGC, AJT) + ) or UGC == Cn use_mapping = { 'B': is_BASE, @@ -362,6 +342,7 @@ def is_VOWEL_MOD(U, UISC, UDI, UGC, AJT): 'SM': is_SYM_MOD, 'V': is_VOWEL, 'VM': is_VOWEL_MOD, + 'WJ': is_Word_Joiner, } use_positions = { @@ -435,10 +416,6 @@ def map_to_use(data): if U == 0x1CED: UISC = Tone_Mark - # TODO: https://github.com/microsoft/font-tools/issues/1 - if U == 0xA982: - UISC = Consonant_Succeeding_Repha - values = [k for k,v in items if v(U, UISC, UDI, UGC, AJT)] assert len(values) == 1, "%s %s %s %s %s %s" % ( hex(U), UISC, UDI, UGC, AJT, values) @@ -482,11 +459,12 @@ def map_to_use(data): return out -defaults = ('O', 'No_Block') -data = map_to_use(data) +use_data = map_to_use(combined) print('// WARNING: this file was generated by ../scripts/gen-universal-table.py') print() +print('use crate::GlyphInfo;') +print('use unicode_properties::GeneralCategory;') print('use super::universal::{Category, category::*};') total = 0 @@ -494,7 +472,7 @@ def map_to_use(data): last_block = None -def print_block(block, start, end, data): +def print_block(block, start, end, use_data): global total, used, last_block if block and block != last_block: print() @@ -509,10 +487,16 @@ def print_block(block, start, end, data): if u % 16 == 0: print() print(' /* %04X */' % u, end='') - if u in data: + if u in use_data: num += 1 - d = data.get(u, defaults) - print('%6s,' % d[0], end='') + d = use_data.get(u) + if d is not None: + d = d[0] + elif u in unicode_data[4]: + d = 'O' + else: + d = 'WJ' + print("%6s," % d, end='') total += end - start + 1 used += num @@ -520,7 +504,7 @@ def print_block(block, start, end, data): last_block = block -uu = sorted(data.keys()) +uu = sorted(use_data.keys()) last = -100000 num = 0 @@ -534,19 +518,19 @@ def print_block(block, start, end, data): for u in uu: if u <= last: continue - if data[u][0] == 'O': + if use_data[u][0] == 'O': continue - block = data[u][1] + block = use_data[u][1] start = u // 8 * 8 end = start + 1 - while end in uu and block == data[end][1]: + while end in uu and block == use_data[end][1]: end += 1 end = (end - 1) // 8 * 8 + 7 if start != last + 1: if start - last <= 1 + 16 * 3: - print_block(None, last + 1, start - 1, data) + print_block(None, last + 1, start - 1, use_data) last = start - 1 else: if last >= 0: @@ -556,7 +540,7 @@ def print_block(block, start, end, data): (start, offset)) starts.append(start) - print_block(block, start, end, data) + print_block(block, start, end, use_data) last = end ends.append(last + 1) offset += ends[-1] - starts[-1] @@ -570,7 +554,8 @@ def print_block(block, start, end, data): print(o) print() print('#[rustfmt::skip]') -print('pub fn get_category(u: u32) -> Category {') +print('pub fn get_category(info: &GlyphInfo) -> Category {') +print(' let u = info.glyph_id;') print(' match u >> %d {' % page_bits) pages = set([u >> page_bits for u in starts + ends]) for p in sorted(pages): @@ -585,6 +570,10 @@ def print_block(block, start, end, data): print(' _ => {}') print(' }') print() +print(' if info.general_category() == GeneralCategory::Unassigned {') +print(' return WJ;') +print(' }') +print() print(' O') print('}') diff --git a/scripts/ms-use/IndicPositionalCategory-Additional.txt b/scripts/ms-use/IndicPositionalCategory-Additional.txt index 5a338378..83a164e4 100644 --- a/scripts/ms-use/IndicPositionalCategory-Additional.txt +++ b/scripts/ms-use/IndicPositionalCategory-Additional.txt @@ -2,7 +2,7 @@ # Not derivable # Initial version based on Unicode 7.0 by Andrew Glass 2014-03-17 # Updated for Unicode 10.0 by Andrew Glass 2017-07-25 -# Amended for Unicode 10.0 by Andrew Glass 2018-09-21 +# Ammended for Unicode 10.0 by Andrew Glass 2018-09-21 # Updated for L2/19-083 by Andrew Glass 2019-05-06 # Updated for Unicode 12.1 by Andrew Glass 2019-05-30 # Updated for Unicode 13.0 by Andrew Glass 2020-07-28 @@ -58,16 +58,16 @@ AA35   ; Top # Mn       CHAM CONSONANT SIGN # Indic_Positional_Category=Bottom 0859..085B ; Bottom # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 18A9 ; Bottom # Mn MONGOLIAN LETTER ALI GALI DAGALGA -10AE5 ; Bottom # Mn MANICHAEAN ABBREVIATION MARK ABOVE # Overridden, ccc controls order +10AE5 ; Bottom # Mn MANICHAEAN ABBREVIATION MARK ABOVE # Overriden, ccc controls order 10AE6 ; Bottom # Mn MANICHAEAN ABBREVIATION MARK BELOW 10F46..10F47 ; Bottom # Mn [2] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING TWO DOTS BELOW -10F48..10F4A ; Bottom # Mn [3] SOGDIAN COMBINING DOT ABOVE..SOGDIAN COMBINING CURVE ABOVE # Overridden, ccc controls order +10F48..10F4A ; Bottom # Mn [3] SOGDIAN COMBINING DOT ABOVE..SOGDIAN COMBINING CURVE ABOVE # Overriden, ccc controls order 10F4B ; Bottom # Mn SOGDIAN COMBINING CURVE BELOW -10F4C ; Bottom # Mn SOGDIAN COMBINING HOOK ABOVE # Overridden, ccc controls order +10F4C ; Bottom # Mn SOGDIAN COMBINING HOOK ABOVE # Overriden, ccc controls order 10F4D..10F50 ; Bottom # Mn [4] SOGDIAN COMBINING HOOK BELOW..SOGDIAN COMBINING STROKE BELOW -10F82 ; Bottom # Mn OLD UYGHUR COMBINING DOT ABOVE # Overridden, ccc controls order +10F82 ; Bottom # Mn OLD UYGHUR COMBINING DOT ABOVE # Overriden, ccc controls order 10F83 ; Bottom # Mn OLD UYGHUR COMBINING DOT BELOW -10F84 ; Bottom # Mn OLD UYGHUR COMBINING TWO DOTS ABOVE # Overridden, ccc controls order +10F84 ; Bottom # Mn OLD UYGHUR COMBINING TWO DOTS ABOVE # Overriden, ccc controls order 10F85 ; Bottom # Mn OLD UYGHUR COMBINING TWO DOTS BELOW 16F4F ; Bottom # Mn MIAO SIGN CONSONANT MODIFIER BAR 16F51..16F87 ; Bottom # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI diff --git a/src/aat/feature_mappings.rs b/src/aat/feature_mappings.rs index abb807a8..6e4674a6 100644 --- a/src/aat/feature_mappings.rs +++ b/src/aat/feature_mappings.rs @@ -45,7 +45,7 @@ pub const FEATURE_MAPPINGS: &[FeatureMapping] = &[ FeatureMapping::new(b"frac", FeatureType::Fractions, DIAGONAL_FRACTIONS, NO_FRACTIONS), FeatureMapping::new(b"fwid", FeatureType::TextSpacing, MONOSPACED_TEXT, 7), FeatureMapping::new(b"halt", FeatureType::TextSpacing, ALT_HALF_WIDTH_TEXT, 7), - FeatureMapping::new(b"hist", FeatureType::Ligatures, HISTORICAL_LIGATURES_ON, HISTORICAL_LIGATURES_OFF), + FeatureMapping::new(b"hist", FeatureType::Dummy, 0, 1), FeatureMapping::new(b"hkna", FeatureType::AlternateKana, ALTERNATE_HORIZ_KANA_ON, ALTERNATE_HORIZ_KANA_OFF), FeatureMapping::new(b"hlig", FeatureType::Ligatures, HISTORICAL_LIGATURES_ON, HISTORICAL_LIGATURES_OFF), FeatureMapping::new(b"hngl", FeatureType::Transliteration, HANJA_TO_HANGUL, NO_TRANSLITERATION), @@ -107,5 +107,6 @@ pub const FEATURE_MAPPINGS: &[FeatureMapping] = &[ FeatureMapping::new(b"vkna", FeatureType::AlternateKana, ALTERNATE_VERT_KANA_ON, ALTERNATE_VERT_KANA_OFF), FeatureMapping::new(b"vpal", FeatureType::TextSpacing, ALT_PROPORTIONAL_TEXT, 7), FeatureMapping::new(b"vrt2", FeatureType::VerticalSubstitution, SUBSTITUTE_VERTICAL_FORMS_ON, SUBSTITUTE_VERTICAL_FORMS_OFF), + FeatureMapping::new(b"vrtr", FeatureType::VerticalSubstitution, 2, 3), FeatureMapping::new(b"zero", FeatureType::TypographicExtras, SLASHED_ZERO_ON, SLASHED_ZERO_OFF), ]; diff --git a/src/aat/map.rs b/src/aat/map.rs index e6fe075f..0ca366a4 100644 --- a/src/aat/map.rs +++ b/src/aat/map.rs @@ -27,6 +27,9 @@ pub enum FeatureType { ContextualAlternatives = 36, LowerCase = 37, UpperCase = 38, + + // In harfbuzz, they just use the number 40 for "hist" but don't give it a name + Dummy = 40, } #[derive(Default)] diff --git a/src/buffer.rs b/src/buffer.rs index d219fe4b..75eb2244 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -84,6 +84,9 @@ pub mod glyph_flag { /// within text clusters. /// /// The UNSAFE_TO_BREAK flag will always imply this flag. + /// To use this flag, you must enable the buffer flag + /// PRODUCE_UNSAFE_TO_CONCAT during shaping, otherwise + /// the buffer flag will not be reliably produced. pub const UNSAFE_TO_CONCAT: u32 = 0x00000002; /// All the currently defined flags. @@ -1349,10 +1352,18 @@ impl Buffer { } pub fn unsafe_to_concat(&mut self, start: Option, end: Option) { + if !self.flags.contains(BufferFlags::PRODUCE_UNSAFE_TO_CONCAT) { + return; + } + self._set_glyph_flags(UNSAFE_TO_CONCAT, start, end, Some(true), None); } pub fn unsafe_to_break_from_outbuffer(&mut self, start: Option, end: Option) { + if !self.flags.contains(BufferFlags::PRODUCE_UNSAFE_TO_CONCAT) { + return; + } + self._set_glyph_flags( UNSAFE_TO_BREAK | UNSAFE_TO_CONCAT, start, @@ -1720,6 +1731,8 @@ bitflags::bitflags! { const DO_NOT_INSERT_DOTTED_CIRCLE = 1 << 5; /// Indicates that the shape() call and its variants should perform various verification processes on the results of the shaping operation on the buffer. If the verification fails, then either a buffer message is sent, if a message handler is installed on the buffer, or a message is written to standard error. In either case, the shaping result might be modified to show the failed output. const VERIFY = 1 << 6; + /// Indicates that the `UNSAFE_TO_CONCAT` glyph-flag should be produced by the shaper. By default it will not be produced since it incurs a cost. + const PRODUCE_UNSAFE_TO_CONCAT = 1 << 7; } } diff --git a/src/common.rs b/src/common.rs index 1bc3c6f8..25daee96 100644 --- a/src/common.rs +++ b/src/common.rs @@ -452,6 +452,8 @@ pub mod script { pub const TOTO: Script = Script::from_bytes(b"Toto"); pub const VITHKUQI: Script = Script::from_bytes(b"Vith"); + pub const SCRIPT_MATH: Script = Script::from_bytes(b"Zmth"); + // https://github.com/harfbuzz/harfbuzz/issues/1162 pub const MYANMAR_ZAWGYI: Script = Script::from_bytes(b"Qaag"); } diff --git a/src/complex/arabic.rs b/src/complex/arabic.rs index ac57a25e..27c01b4a 100644 --- a/src/complex/arabic.rs +++ b/src/complex/arabic.rs @@ -599,6 +599,11 @@ const MODIFIER_COMBINING_MARKS: &[u32] = &[ 0x06E3, // ARABIC SMALL LOW SEEN 0x06E7, // ARABIC SMALL HIGH YEH 0x06E8, // ARABIC SMALL HIGH NOON + 0x08CA, // ARABIC SMALL HIGH FARSI YEH + 0x08CB, // ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW + 0x08CD, // ARABIC SMALL HIGH ZAH + 0x08CE, // ARABIC LARGE ROUND DOT ABOVE + 0x08CF, // ARABIC LARGE ROUND DOT BELOW 0x08D3, // ARABIC SMALL LOW WAW 0x08F3, // ARABIC SMALL HIGH WAW ]; diff --git a/src/complex/universal.rs b/src/complex/universal.rs index 75b1afac..80d022ef 100644 --- a/src/complex/universal.rs +++ b/src/complex/universal.rs @@ -48,7 +48,7 @@ pub mod category { pub const ZWNJ: u8 = 14; // Zero width non-joiner // pub const ZWJ: u8 = 15; // Zero width joiner - // pub const WJ: u8 = 16; // Word joiner + pub const WJ: u8 = 16; // Word joiner pub const RSV: u8 = 17; // Reserved characters pub const R: u8 = 18; // REPHA @@ -296,8 +296,7 @@ fn setup_topographical_masks(plan: &ShapePlan, buffer: &mut Buffer) { let mut end = buffer.next_syllable(0); while start < buffer.len { let syllable = buffer.info[start].syllable() & 0x0F; - if syllable == SyllableType::SymbolCluster as u8 - || syllable == SyllableType::HieroglyphCluster as u8 + if syllable == SyllableType::HieroglyphCluster as u8 || syllable == SyllableType::NonCluster as u8 { last_form = None; @@ -539,6 +538,6 @@ fn setup_masks(plan: &ShapePlan, _: &Face, buffer: &mut Buffer) { // We cannot setup masks here. We save information about characters // and setup masks later on in a pause-callback. for info in buffer.info_slice_mut() { - info.set_use_category(super::universal_table::get_category(info.glyph_id)); + info.set_use_category(super::universal_table::get_category(info)); } } diff --git a/src/complex/universal_machine.rl b/src/complex/universal_machine.rl index 9ff502af..1622d786 100644 --- a/src/complex/universal_machine.rl +++ b/src/complex/universal_machine.rl @@ -41,6 +41,7 @@ H = 12; # HALANT HN = 13; # HALANT_NUM ZWNJ = 14; # Zero width non-joiner +WJ = 16; # Word joiner R = 18; # REPHA CS = 43; # CONS_WITH_STACKER HVM = 44; # HALANT_OR_VOWEL_MODIFIER @@ -119,14 +120,15 @@ standard_cluster = complex_syllable_start complex_syllable_tail ; +tail = complex_syllable_tail | sakot_terminated_cluster_tail | symbol_cluster_tail | virama_terminated_cluster_tail; broken_cluster = R? - (complex_syllable_tail | number_joiner_terminated_cluster_tail | numeral_cluster_tail | symbol_cluster_tail | virama_terminated_cluster_tail | sakot_terminated_cluster_tail) + (tail | number_joiner_terminated_cluster_tail | numeral_cluster_tail) ; number_joiner_terminated_cluster = N number_joiner_terminated_cluster_tail; numeral_cluster = N numeral_cluster_tail?; -symbol_cluster = (O | GB) symbol_cluster_tail?; +symbol_cluster = (O | GB) tail?; hieroglyph_cluster = SB+ | SB* G SE* (J SE* (G SE*)?)*; other = any; @@ -208,7 +210,7 @@ fn found_syllable( } fn not_ccs_default_ignorable(i: &GlyphInfo) -> bool { - !(matches!(i.use_category(), category::CGJ | category::RSV) && i.is_default_ignorable()) + i.use_category() != category::CGJ } fn included(infos: &[Cell], i: usize) -> bool { diff --git a/src/complex/universal_machine.rs b/src/complex/universal_machine.rs index d193adbd..80e5ce20 100644 --- a/src/complex/universal_machine.rs +++ b/src/complex/universal_machine.rs @@ -1,3 +1,7 @@ +// This file is autogenerated. Do not edit it! +// +// See docs/ragel.md for details. + #![allow( dead_code, non_upper_case_globals, @@ -19,98 +23,162 @@ use crate::complex::universal::category; use crate::GlyphInfo; use core::cell::Cell; -static _use_syllable_machine_trans_keys: [u8; 124] = [ - 0, 36, 26, 27, 27, 27, 5, 33, 5, 33, 1, 1, 9, 33, 10, 33, 11, 32, 12, 32, 13, 32, 30, 31, 31, - 31, 11, 33, 11, 33, 11, 33, 1, 1, 11, 33, 10, 33, 10, 33, 10, 33, 9, 33, 9, 33, 9, 33, 5, 33, - 1, 33, 7, 7, 3, 3, 5, 33, 5, 33, 1, 1, 9, 33, 10, 33, 11, 32, 12, 32, 13, 32, 30, 31, 31, 31, - 11, 33, 11, 33, 11, 33, 1, 1, 11, 33, 10, 33, 10, 33, 10, 33, 9, 33, 9, 33, 9, 33, 5, 33, 1, - 33, 3, 3, 7, 7, 1, 33, 5, 33, 26, 27, 27, 27, 1, 4, 35, 37, 34, 37, 34, 36, 0, 0, +static _use_syllable_machine_trans_keys: [u8; 218] = [ + 0, 36, 5, 33, 5, 33, 1, 1, 9, 33, 10, 33, 11, 32, 12, 32, 13, 32, 30, 31, 31, 31, 11, 33, 11, + 33, 11, 33, 1, 1, 11, 33, 10, 33, 10, 33, 10, 33, 9, 33, 9, 33, 9, 33, 5, 33, 1, 33, 5, 33, 26, + 27, 27, 27, 5, 33, 5, 33, 1, 1, 9, 33, 10, 33, 11, 32, 12, 32, 13, 32, 30, 31, 31, 31, 11, 33, + 11, 33, 11, 33, 1, 1, 11, 33, 10, 33, 10, 33, 10, 33, 9, 33, 9, 33, 9, 33, 5, 33, 1, 33, 7, 7, + 3, 3, 5, 33, 5, 33, 1, 1, 9, 33, 10, 33, 11, 32, 12, 32, 13, 32, 30, 31, 31, 31, 11, 33, 11, + 33, 11, 33, 1, 1, 11, 33, 10, 33, 10, 33, 10, 33, 9, 33, 9, 33, 9, 33, 5, 33, 1, 33, 5, 33, 5, + 33, 1, 1, 9, 33, 10, 33, 11, 32, 12, 32, 13, 32, 30, 31, 31, 31, 11, 33, 11, 33, 11, 33, 1, 1, + 11, 33, 10, 33, 10, 33, 10, 33, 9, 33, 9, 33, 9, 33, 5, 33, 1, 33, 3, 3, 7, 7, 1, 33, 5, 33, + 26, 27, 27, 27, 1, 4, 35, 37, 34, 37, 34, 36, 0, 0, ]; static _use_syllable_machine_char_class: [i8; 55] = [ 0, 1, 2, 2, 3, 4, 2, 2, 2, 2, 2, 5, 6, 7, 2, 2, 2, 2, 8, 2, 2, 2, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 2, 23, 24, 25, 2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 0, 0, ]; -static _use_syllable_machine_index_offsets: [i16; 63] = [ - 0, 37, 39, 40, 69, 98, 99, 124, 148, 170, 191, 211, 213, 214, 237, 260, 283, 284, 307, 331, - 355, 379, 404, 429, 454, 483, 516, 517, 518, 547, 576, 577, 602, 626, 648, 669, 689, 691, 692, - 715, 738, 761, 762, 785, 809, 833, 857, 882, 907, 932, 961, 994, 995, 996, 1029, 1058, 1060, - 1061, 1065, 1068, 1072, 0, 0, +static _use_syllable_machine_index_offsets: [i16; 110] = [ + 0, 37, 66, 95, 96, 121, 145, 167, 188, 208, 210, 211, 234, 257, 280, 281, 304, 328, 352, 376, + 401, 426, 451, 480, 513, 542, 544, 545, 574, 603, 604, 629, 653, 675, 696, 716, 718, 719, 742, + 765, 788, 789, 812, 836, 860, 884, 909, 934, 959, 988, 1021, 1022, 1023, 1052, 1081, 1082, + 1107, 1131, 1153, 1174, 1194, 1196, 1197, 1220, 1243, 1266, 1267, 1290, 1314, 1338, 1362, 1387, + 1412, 1437, 1466, 1499, 1528, 1557, 1558, 1583, 1607, 1629, 1650, 1670, 1672, 1673, 1696, 1719, + 1742, 1743, 1766, 1790, 1814, 1838, 1863, 1888, 1913, 1942, 1975, 1976, 1977, 2010, 2039, 2041, + 2042, 2046, 2049, 2053, 0, 0, ]; -static _use_syllable_machine_indices: [i8; 1077] = [ +static _use_syllable_machine_indices: [i8; 2058] = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 10, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 7, 33, 3, 34, 1, 36, 36, 38, 39, 37, 37, 40, 41, 42, 43, 44, 45, - 46, 40, 47, 2, 48, 49, 50, 51, 52, 53, 54, 37, 37, 37, 55, 56, 57, 58, 39, 38, 39, 37, 37, 40, - 41, 42, 43, 44, 45, 46, 40, 47, 48, 48, 49, 50, 51, 52, 53, 54, 37, 37, 37, 55, 56, 57, 58, 39, - 38, 40, 41, 42, 43, 44, 37, 37, 37, 37, 37, 37, 49, 50, 51, 52, 53, 54, 37, 37, 37, 41, 56, 57, - 58, 60, 41, 42, 43, 44, 37, 37, 37, 37, 37, 37, 37, 37, 37, 52, 53, 54, 37, 37, 37, 37, 56, 57, - 58, 60, 42, 43, 44, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 56, 57, 58, - 43, 44, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 56, 57, 58, 44, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 56, 57, 58, 56, 57, 57, 42, 43, 44, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 52, 53, 54, 37, 37, 37, 37, 56, 57, 58, 60, 42, 43, 44, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 53, 54, 37, 37, 37, 37, 56, 57, 58, 60, 42, 43, 44, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 54, 37, 37, 37, 37, 56, 57, 58, 60, 62, 42, 43, 44, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 56, 57, 58, 60, 41, 42, 43, 44, 37, 37, 37, - 37, 37, 37, 49, 50, 51, 52, 53, 54, 37, 37, 37, 41, 56, 57, 58, 60, 41, 42, 43, 44, 37, 37, 37, - 37, 37, 37, 37, 50, 51, 52, 53, 54, 37, 37, 37, 41, 56, 57, 58, 60, 41, 42, 43, 44, 37, 37, 37, - 37, 37, 37, 37, 37, 51, 52, 53, 54, 37, 37, 37, 41, 56, 57, 58, 60, 40, 41, 42, 43, 44, 37, 46, - 40, 37, 37, 37, 49, 50, 51, 52, 53, 54, 37, 37, 37, 41, 56, 57, 58, 60, 40, 41, 42, 43, 44, 37, - 37, 40, 37, 37, 37, 49, 50, 51, 52, 53, 54, 37, 37, 37, 41, 56, 57, 58, 60, 40, 41, 42, 43, 44, - 45, 46, 40, 37, 37, 37, 49, 50, 51, 52, 53, 54, 37, 37, 37, 41, 56, 57, 58, 60, 38, 39, 37, 37, - 40, 41, 42, 43, 44, 45, 46, 40, 47, 37, 48, 49, 50, 51, 52, 53, 54, 37, 37, 37, 55, 56, 57, 58, - 39, 38, 59, 59, 59, 59, 59, 59, 59, 59, 41, 42, 43, 44, 59, 59, 59, 59, 59, 59, 59, 59, 59, 52, - 53, 54, 59, 59, 59, 59, 56, 57, 58, 60, 64, 4, 38, 39, 37, 37, 40, 41, 42, 43, 44, 45, 46, 40, - 47, 2, 48, 49, 50, 51, 52, 53, 54, 1, 36, 37, 55, 56, 57, 58, 39, 6, 7, 66, 66, 10, 11, 12, 13, - 14, 15, 16, 10, 17, 19, 19, 20, 21, 22, 23, 24, 25, 66, 66, 66, 29, 30, 31, 32, 7, 6, 10, 11, - 12, 13, 14, 66, 66, 66, 66, 66, 66, 20, 21, 22, 23, 24, 25, 66, 66, 66, 11, 30, 31, 32, 67, 11, - 12, 13, 14, 66, 66, 66, 66, 66, 66, 66, 66, 66, 23, 24, 25, 66, 66, 66, 66, 30, 31, 32, 67, 12, - 13, 14, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 30, 31, 32, 13, 14, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 30, 31, 32, 14, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 30, 31, 32, 30, 31, 31, 12, 13, 14, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 23, 24, 25, 66, 66, 66, 66, 30, 31, 32, 67, 12, 13, 14, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 24, 25, 66, 66, 66, 66, 30, 31, 32, 67, 12, 13, 14, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 25, 66, 66, 66, 66, 30, 31, 32, 67, 68, 12, 13, 14, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 30, 31, 32, 67, 11, 12, 13, 14, 66, 66, 66, 66, 66, 66, - 20, 21, 22, 23, 24, 25, 66, 66, 66, 11, 30, 31, 32, 67, 11, 12, 13, 14, 66, 66, 66, 66, 66, 66, - 66, 21, 22, 23, 24, 25, 66, 66, 66, 11, 30, 31, 32, 67, 11, 12, 13, 14, 66, 66, 66, 66, 66, 66, - 66, 66, 22, 23, 24, 25, 66, 66, 66, 11, 30, 31, 32, 67, 10, 11, 12, 13, 14, 66, 16, 10, 66, 66, - 66, 20, 21, 22, 23, 24, 25, 66, 66, 66, 11, 30, 31, 32, 67, 10, 11, 12, 13, 14, 66, 66, 10, 66, - 66, 66, 20, 21, 22, 23, 24, 25, 66, 66, 66, 11, 30, 31, 32, 67, 10, 11, 12, 13, 14, 15, 16, 10, - 66, 66, 66, 20, 21, 22, 23, 24, 25, 66, 66, 66, 11, 30, 31, 32, 67, 6, 7, 66, 66, 10, 11, 12, - 13, 14, 15, 16, 10, 17, 66, 19, 20, 21, 22, 23, 24, 25, 66, 66, 66, 29, 30, 31, 32, 7, 6, 66, - 66, 66, 66, 66, 66, 66, 66, 11, 12, 13, 14, 66, 66, 66, 66, 66, 66, 66, 66, 66, 23, 24, 25, 66, - 66, 66, 66, 30, 31, 32, 67, 69, 8, 2, 66, 66, 2, 6, 7, 8, 66, 10, 11, 12, 13, 14, 15, 16, 10, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 66, 29, 30, 31, 32, 7, 6, 7, 66, 66, 10, 11, 12, - 13, 14, 15, 16, 10, 17, 18, 19, 20, 21, 22, 23, 24, 25, 66, 66, 66, 29, 30, 31, 32, 7, 26, 27, - 27, 2, 70, 70, 2, 72, 71, 33, 33, 72, 71, 72, 33, 71, 34, 0, 0, + 26, 27, 28, 29, 30, 31, 32, 7, 33, 3, 34, 36, 37, 35, 35, 38, 39, 40, 41, 42, 43, 44, 38, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 35, 56, 57, 58, 59, 37, 36, 37, 35, 35, 38, 39, 40, 41, + 42, 43, 44, 38, 45, 47, 47, 48, 49, 50, 51, 52, 53, 35, 35, 35, 56, 57, 58, 59, 37, 36, 38, 39, + 40, 41, 42, 35, 35, 35, 35, 35, 35, 48, 49, 50, 51, 52, 53, 35, 35, 35, 39, 57, 58, 59, 60, 39, + 40, 41, 42, 35, 35, 35, 35, 35, 35, 35, 35, 35, 51, 52, 53, 35, 35, 35, 35, 57, 58, 59, 60, 40, + 41, 42, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 57, 58, 59, 41, 42, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 57, 58, 59, 42, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 57, 58, 59, 57, 58, 58, 40, 41, 42, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 51, 52, 53, 35, 35, 35, 35, 57, 58, 59, 60, 40, 41, 42, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 52, 53, 35, 35, 35, 35, 57, 58, 59, 60, 40, 41, 42, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 53, 35, 35, 35, 35, 57, 58, 59, 60, 61, 40, 41, 42, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 57, 58, 59, 60, 39, 40, 41, 42, 35, 35, 35, 35, 35, 35, + 48, 49, 50, 51, 52, 53, 35, 35, 35, 39, 57, 58, 59, 60, 39, 40, 41, 42, 35, 35, 35, 35, 35, 35, + 35, 49, 50, 51, 52, 53, 35, 35, 35, 39, 57, 58, 59, 60, 39, 40, 41, 42, 35, 35, 35, 35, 35, 35, + 35, 35, 50, 51, 52, 53, 35, 35, 35, 39, 57, 58, 59, 60, 38, 39, 40, 41, 42, 35, 44, 38, 35, 35, + 35, 48, 49, 50, 51, 52, 53, 35, 35, 35, 39, 57, 58, 59, 60, 38, 39, 40, 41, 42, 35, 35, 38, 35, + 35, 35, 48, 49, 50, 51, 52, 53, 35, 35, 35, 39, 57, 58, 59, 60, 38, 39, 40, 41, 42, 43, 44, 38, + 35, 35, 35, 48, 49, 50, 51, 52, 53, 35, 35, 35, 39, 57, 58, 59, 60, 36, 37, 35, 35, 38, 39, 40, + 41, 42, 43, 44, 38, 45, 35, 47, 48, 49, 50, 51, 52, 53, 35, 35, 35, 56, 57, 58, 59, 37, 36, 35, + 35, 35, 35, 35, 35, 35, 35, 39, 40, 41, 42, 35, 35, 35, 35, 35, 35, 35, 35, 35, 51, 52, 53, 35, + 35, 35, 35, 57, 58, 59, 60, 36, 37, 35, 35, 38, 39, 40, 41, 42, 43, 44, 38, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 35, 35, 35, 56, 57, 58, 59, 37, 54, 55, 55, 63, 64, 62, 62, 65, 66, 67, 68, 69, + 70, 71, 65, 72, 2, 73, 74, 75, 76, 77, 78, 79, 62, 62, 62, 80, 81, 82, 83, 64, 63, 64, 62, 62, + 65, 66, 67, 68, 69, 70, 71, 65, 72, 73, 73, 74, 75, 76, 77, 78, 79, 62, 62, 62, 80, 81, 82, 83, + 64, 63, 65, 66, 67, 68, 69, 62, 62, 62, 62, 62, 62, 74, 75, 76, 77, 78, 79, 62, 62, 62, 66, 81, + 82, 83, 85, 66, 67, 68, 69, 62, 62, 62, 62, 62, 62, 62, 62, 62, 77, 78, 79, 62, 62, 62, 62, 81, + 82, 83, 85, 67, 68, 69, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 81, 82, + 83, 68, 69, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 81, 82, 83, 69, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 81, 82, 83, 81, 82, 82, 67, 68, 69, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 77, 78, 79, 62, 62, 62, 62, 81, 82, 83, 85, 67, 68, 69, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 78, 79, 62, 62, 62, 62, 81, 82, 83, 85, 67, 68, 69, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 79, 62, 62, 62, 62, 81, 82, 83, 85, 87, 67, 68, 69, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 81, 82, 83, 85, 66, 67, 68, 69, 62, 62, + 62, 62, 62, 62, 74, 75, 76, 77, 78, 79, 62, 62, 62, 66, 81, 82, 83, 85, 66, 67, 68, 69, 62, 62, + 62, 62, 62, 62, 62, 75, 76, 77, 78, 79, 62, 62, 62, 66, 81, 82, 83, 85, 66, 67, 68, 69, 62, 62, + 62, 62, 62, 62, 62, 62, 76, 77, 78, 79, 62, 62, 62, 66, 81, 82, 83, 85, 65, 66, 67, 68, 69, 62, + 71, 65, 62, 62, 62, 74, 75, 76, 77, 78, 79, 62, 62, 62, 66, 81, 82, 83, 85, 65, 66, 67, 68, 69, + 62, 62, 65, 62, 62, 62, 74, 75, 76, 77, 78, 79, 62, 62, 62, 66, 81, 82, 83, 85, 65, 66, 67, 68, + 69, 70, 71, 65, 62, 62, 62, 74, 75, 76, 77, 78, 79, 62, 62, 62, 66, 81, 82, 83, 85, 63, 64, 62, + 62, 65, 66, 67, 68, 69, 70, 71, 65, 72, 62, 73, 74, 75, 76, 77, 78, 79, 62, 62, 62, 80, 81, 82, + 83, 64, 63, 84, 84, 84, 84, 84, 84, 84, 84, 66, 67, 68, 69, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 77, 78, 79, 84, 84, 84, 84, 81, 82, 83, 85, 89, 4, 91, 92, 62, 62, 93, 94, 95, 96, 97, 98, 99, + 93, 100, 101, 102, 103, 104, 105, 106, 107, 108, 54, 55, 62, 109, 110, 111, 83, 92, 91, 92, 62, + 62, 93, 94, 95, 96, 97, 98, 99, 93, 100, 102, 102, 103, 104, 105, 106, 107, 108, 62, 62, 62, + 109, 110, 111, 83, 92, 91, 93, 94, 95, 96, 97, 62, 62, 62, 62, 62, 62, 103, 104, 105, 106, 107, + 108, 62, 62, 62, 94, 110, 111, 83, 112, 94, 95, 96, 97, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 106, 107, 108, 62, 62, 62, 62, 110, 111, 83, 112, 95, 96, 97, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 110, 111, 83, 96, 97, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 110, 111, 83, 97, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 110, 111, 83, 110, 111, 111, 95, 96, 97, 62, 62, 62, 62, 62, 62, 62, 62, 62, 106, + 107, 108, 62, 62, 62, 62, 110, 111, 83, 112, 95, 96, 97, 62, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 107, 108, 62, 62, 62, 62, 110, 111, 83, 112, 95, 96, 97, 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 108, 62, 62, 62, 62, 110, 111, 83, 112, 113, 95, 96, 97, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 110, 111, 83, 112, 94, 95, 96, 97, 62, 62, 62, 62, 62, + 62, 103, 104, 105, 106, 107, 108, 62, 62, 62, 94, 110, 111, 83, 112, 94, 95, 96, 97, 62, 62, + 62, 62, 62, 62, 62, 104, 105, 106, 107, 108, 62, 62, 62, 94, 110, 111, 83, 112, 94, 95, 96, 97, + 62, 62, 62, 62, 62, 62, 62, 62, 105, 106, 107, 108, 62, 62, 62, 94, 110, 111, 83, 112, 93, 94, + 95, 96, 97, 62, 99, 93, 62, 62, 62, 103, 104, 105, 106, 107, 108, 62, 62, 62, 94, 110, 111, 83, + 112, 93, 94, 95, 96, 97, 62, 62, 93, 62, 62, 62, 103, 104, 105, 106, 107, 108, 62, 62, 62, 94, + 110, 111, 83, 112, 93, 94, 95, 96, 97, 98, 99, 93, 62, 62, 62, 103, 104, 105, 106, 107, 108, + 62, 62, 62, 94, 110, 111, 83, 112, 91, 92, 62, 62, 93, 94, 95, 96, 97, 98, 99, 93, 100, 62, + 102, 103, 104, 105, 106, 107, 108, 62, 62, 62, 109, 110, 111, 83, 92, 91, 84, 84, 84, 84, 84, + 84, 84, 84, 94, 95, 96, 97, 84, 84, 84, 84, 84, 84, 84, 84, 84, 106, 107, 108, 84, 84, 84, 84, + 110, 111, 83, 112, 91, 92, 62, 62, 93, 94, 95, 96, 97, 98, 99, 93, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 62, 62, 62, 109, 110, 111, 83, 92, 6, 7, 114, 114, 10, 11, 12, 13, 14, 15, + 16, 10, 17, 19, 19, 20, 21, 22, 23, 24, 25, 114, 114, 114, 29, 30, 31, 32, 7, 6, 10, 11, 12, + 13, 14, 114, 114, 114, 114, 114, 114, 20, 21, 22, 23, 24, 25, 114, 114, 114, 11, 30, 31, 32, + 115, 11, 12, 13, 14, 114, 114, 114, 114, 114, 114, 114, 114, 114, 23, 24, 25, 114, 114, 114, + 114, 30, 31, 32, 115, 12, 13, 14, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 30, 31, 32, 13, 14, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 30, 31, 32, 14, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 30, 31, 32, 30, 31, 31, 12, 13, 14, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 23, 24, 25, 114, 114, 114, 114, 30, 31, 32, 115, 12, 13, 14, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 24, 25, 114, 114, 114, 114, 30, 31, 32, 115, 12, 13, 14, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 25, 114, 114, 114, 114, 30, 31, 32, 115, 116, 12, + 13, 14, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 30, 31, + 32, 115, 11, 12, 13, 14, 114, 114, 114, 114, 114, 114, 20, 21, 22, 23, 24, 25, 114, 114, 114, + 11, 30, 31, 32, 115, 11, 12, 13, 14, 114, 114, 114, 114, 114, 114, 114, 21, 22, 23, 24, 25, + 114, 114, 114, 11, 30, 31, 32, 115, 11, 12, 13, 14, 114, 114, 114, 114, 114, 114, 114, 114, 22, + 23, 24, 25, 114, 114, 114, 11, 30, 31, 32, 115, 10, 11, 12, 13, 14, 114, 16, 10, 114, 114, 114, + 20, 21, 22, 23, 24, 25, 114, 114, 114, 11, 30, 31, 32, 115, 10, 11, 12, 13, 14, 114, 114, 10, + 114, 114, 114, 20, 21, 22, 23, 24, 25, 114, 114, 114, 11, 30, 31, 32, 115, 10, 11, 12, 13, 14, + 15, 16, 10, 114, 114, 114, 20, 21, 22, 23, 24, 25, 114, 114, 114, 11, 30, 31, 32, 115, 6, 7, + 114, 114, 10, 11, 12, 13, 14, 15, 16, 10, 17, 114, 19, 20, 21, 22, 23, 24, 25, 114, 114, 114, + 29, 30, 31, 32, 7, 6, 114, 114, 114, 114, 114, 114, 114, 114, 11, 12, 13, 14, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 23, 24, 25, 114, 114, 114, 114, 30, 31, 32, 115, 117, 8, 2, 114, + 114, 2, 6, 7, 8, 114, 10, 11, 12, 13, 14, 15, 16, 10, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 114, 29, 30, 31, 32, 7, 6, 7, 114, 114, 10, 11, 12, 13, 14, 15, 16, 10, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 114, 114, 114, 29, 30, 31, 32, 7, 26, 27, 27, 2, 118, 118, 2, 120, 119, 33, 33, + 120, 119, 120, 33, 119, 34, 0, 0, ]; -static _use_syllable_machine_index_defaults: [i8; 63] = [ - 3, 35, 35, 37, 37, 59, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 61, 37, 37, 37, 37, 37, 37, 37, - 37, 59, 63, 65, 37, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 70, 71, 71, 71, 0, 0, +static _use_syllable_machine_index_defaults: [i8; 110] = [ + 3, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 62, 62, 84, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 86, 62, 62, 62, 62, 62, 62, 62, + 62, 84, 88, 90, 62, 62, 84, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 86, 62, 62, 62, 62, 62, 62, + 62, 62, 84, 62, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 118, 119, 119, 119, 0, 0, ]; -static _use_syllable_machine_cond_targs: [i8; 75] = [ - 0, 1, 3, 0, 26, 28, 29, 30, 51, 53, 31, 32, 33, 34, 35, 46, 47, 48, 54, 49, 43, 44, 45, 38, 39, - 40, 55, 56, 57, 50, 36, 37, 0, 58, 60, 0, 2, 0, 4, 5, 6, 7, 8, 9, 10, 21, 22, 23, 24, 18, 19, - 20, 13, 14, 15, 25, 11, 12, 0, 0, 16, 0, 17, 0, 27, 0, 0, 41, 42, 52, 0, 0, 59, 0, 0, +static _use_syllable_machine_cond_targs: [i8; 123] = [ + 0, 1, 27, 0, 50, 52, 76, 77, 98, 100, 78, 79, 80, 81, 82, 93, 94, 95, 101, 96, 90, 91, 92, 85, + 86, 87, 102, 103, 104, 97, 83, 84, 0, 105, 107, 0, 2, 3, 4, 5, 6, 7, 8, 19, 20, 21, 24, 22, 16, + 17, 18, 11, 12, 13, 25, 26, 23, 9, 10, 0, 14, 15, 0, 28, 29, 30, 31, 32, 33, 34, 45, 46, 47, + 48, 42, 43, 44, 37, 38, 39, 49, 35, 36, 0, 0, 40, 0, 41, 0, 51, 0, 53, 54, 55, 56, 57, 58, 59, + 70, 71, 72, 75, 73, 67, 68, 69, 62, 63, 64, 74, 60, 61, 65, 66, 0, 88, 89, 99, 0, 0, 106, 0, 0, ]; -static _use_syllable_machine_cond_actions: [i8; 75] = [ +static _use_syllable_machine_cond_actions: [i8; 123] = [ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 9, 0, - 10, 0, 11, 12, 0, 0, 0, 13, 14, 0, 0, 0, + 4, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 10, 0, 11, 0, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 14, 15, 0, 0, 0, ]; -static _use_syllable_machine_to_state_actions: [i8; 63] = [ +static _use_syllable_machine_to_state_actions: [i8; 110] = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; -static _use_syllable_machine_from_state_actions: [i8; 63] = [ +static _use_syllable_machine_from_state_actions: [i8; 110] = [ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; -static _use_syllable_machine_eof_trans: [i8; 63] = [ - 1, 36, 36, 38, 38, 60, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 62, 38, 38, 38, 38, 38, 38, 38, - 38, 60, 64, 66, 38, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 71, 72, 72, 72, 0, 0, +static _use_syllable_machine_eof_trans: [i8; 110] = [ + 1, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 63, 63, 85, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 87, 63, 63, 63, 63, 63, 63, 63, + 63, 85, 89, 91, 63, 63, 85, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 87, 63, 63, 63, 63, 63, 63, + 63, 63, 85, 63, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 119, 120, 120, 120, 0, 0, ]; static use_syllable_machine_start: i32 = 0; static use_syllable_machine_first_final: i32 = 0; @@ -223,12 +291,18 @@ pub fn find_syllables(buffer: &mut Buffer) { if (_use_syllable_machine_cond_actions[(_trans) as usize] != 0) { { match (_use_syllable_machine_cond_actions[(_trans) as usize]) { - 7 => { + 8 => { te = p + 1; { found_syllable!(SyllableType::StandardCluster); } } + 6 => { + te = p + 1; + { + found_syllable!(SyllableType::SymbolCluster); + } + } 4 => { te = p + 1; { @@ -241,35 +315,35 @@ pub fn find_syllables(buffer: &mut Buffer) { found_syllable!(SyllableType::NonCluster); } } - 8 => { + 9 => { te = p; p = p - 1; { found_syllable!(SyllableType::ViramaTerminatedCluster); } } - 9 => { + 10 => { te = p; p = p - 1; { found_syllable!(SyllableType::SakotTerminatedCluster); } } - 6 => { + 7 => { te = p; p = p - 1; { found_syllable!(SyllableType::StandardCluster); } } - 11 => { + 12 => { te = p; p = p - 1; { found_syllable!(SyllableType::NumberJoinerTerminatedCluster); } } - 10 => { + 11 => { te = p; p = p - 1; { @@ -283,21 +357,21 @@ pub fn find_syllables(buffer: &mut Buffer) { found_syllable!(SyllableType::SymbolCluster); } } - 14 => { + 15 => { te = p; p = p - 1; { found_syllable!(SyllableType::HieroglyphCluster); } } - 12 => { + 13 => { te = p; p = p - 1; { found_syllable!(SyllableType::BrokenCluster); } } - 13 => { + 14 => { te = p; p = p - 1; { @@ -357,7 +431,7 @@ fn found_syllable( } fn not_ccs_default_ignorable(i: &GlyphInfo) -> bool { - !(matches!(i.use_category(), category::CGJ | category::RSV) && i.is_default_ignorable()) + i.use_category() != category::CGJ } fn included(infos: &[Cell], i: usize) -> bool { diff --git a/src/complex/universal_table.rs b/src/complex/universal_table.rs index 5b77a435..f5a75ea1 100644 --- a/src/complex/universal_table.rs +++ b/src/complex/universal_table.rs @@ -1,6 +1,8 @@ // WARNING: this file was generated by ../scripts/gen-universal-table.py use super::universal::{category::*, Category}; +use crate::GlyphInfo; +use unicode_properties::GeneralCategory; #[rustfmt::skip] const USE_TABLE: &[Category] = &[ @@ -12,7 +14,7 @@ const USE_TABLE: &[Category] = &[ /* Latin-1 Supplement */ - /* 00A0 */ GB, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 00A0 */ GB, O, O, O, O, O, O, O, O, O, O, O, O, WJ, O, O, /* 00B0 */ O, O, FMPST, FMPST, O, O, O, O, O, O, O, O, O, O, O, O, /* 00C0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, /* 00D0 */ O, O, O, O, O, O, O, GB, @@ -28,12 +30,12 @@ const USE_TABLE: &[Category] = &[ O, O, B, B, B, B, B, B, /* 07D0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 07E0 */ B, B, B, B, B, B, B, B, B, B, B, VMABV, VMABV, VMABV, VMABV, VMABV, - /* 07F0 */ VMABV, VMABV, VMABV, VMABV, O, O, O, O, O, O, B, O, O, VMABV, O, O, + /* 07F0 */ VMABV, VMABV, VMABV, VMABV, O, O, O, O, O, O, B, WJ, WJ, VMABV, O, O, /* Mandaic */ /* 0840 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0850 */ B, B, B, B, B, B, B, B, B, CMBLW, CMBLW, CMBLW, O, O, O, O, + /* 0850 */ B, B, B, B, B, B, B, B, B, CMBLW, CMBLW, CMBLW, WJ, WJ, O, WJ, /* Devanagari */ @@ -48,102 +50,102 @@ const USE_TABLE: &[Category] = &[ /* Bengali */ - /* 0980 */ GB, VMABV, VMPST, VMPST, O, B, B, B, B, B, B, B, B, O, O, B, - /* 0990 */ B, O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 09A0 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, - /* 09B0 */ B, O, B, O, O, O, B, B, B, B, O, O, CMBLW, B, VPST, VPRE, - /* 09C0 */ VPST, VBLW, VBLW, VBLW, VBLW, O, O, VPRE, VPRE, O, O, VPRE, VPRE, H, O, O, - /* 09D0 */ O, O, O, O, O, O, O, VPST, O, O, O, O, B, B, O, B, - /* 09E0 */ B, B, VBLW, VBLW, O, O, B, B, B, B, B, B, B, B, B, B, - /* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, B, O, FMABV, O, + /* 0980 */ GB, VMABV, VMPST, VMPST, WJ, B, B, B, B, B, B, B, B, WJ, WJ, B, + /* 0990 */ B, WJ, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 09A0 */ B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, + /* 09B0 */ B, WJ, B, WJ, WJ, WJ, B, B, B, B, WJ, WJ, CMBLW, B, VPST, VPRE, + /* 09C0 */ VPST, VBLW, VBLW, VBLW, VBLW, WJ, WJ, VPRE, VPRE, WJ, WJ, VPRE, VPRE, H, O, WJ, + /* 09D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, VPST, WJ, WJ, WJ, WJ, B, B, WJ, B, + /* 09E0 */ B, B, VBLW, VBLW, WJ, WJ, B, B, B, B, B, B, B, B, B, B, + /* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, B, O, FMABV, WJ, /* Gurmukhi */ - /* 0A00 */ O, VMABV, VMABV, VMPST, O, B, B, B, B, B, B, O, O, O, O, B, - /* 0A10 */ B, O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0A20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, - /* 0A30 */ B, O, B, B, O, B, B, O, B, B, O, O, CMBLW, O, VPST, VPRE, - /* 0A40 */ VPST, VBLW, VBLW, O, O, O, O, VABV, VABV, O, O, VABV, VABV, H, O, O, - /* 0A50 */ O, VMBLW, O, O, O, O, O, O, O, B, B, B, B, O, B, O, - /* 0A60 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0A70 */ VMABV, CMABV, GB, GB, O, MBLW, O, O, O, O, O, O, O, O, O, O, + /* 0A00 */ WJ, VMABV, VMABV, VMPST, WJ, B, B, B, B, B, B, WJ, WJ, WJ, WJ, B, + /* 0A10 */ B, WJ, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0A20 */ B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, + /* 0A30 */ B, WJ, B, B, WJ, B, B, WJ, B, B, WJ, WJ, CMBLW, WJ, VPST, VPRE, + /* 0A40 */ VPST, VBLW, VBLW, WJ, WJ, WJ, WJ, VABV, VABV, WJ, WJ, VABV, VABV, H, WJ, WJ, + /* 0A50 */ WJ, VMBLW, WJ, WJ, WJ, WJ, WJ, WJ, WJ, B, B, B, B, WJ, B, WJ, + /* 0A60 */ WJ, WJ, WJ, WJ, WJ, WJ, B, B, B, B, B, B, B, B, B, B, + /* 0A70 */ VMABV, CMABV, GB, GB, O, MBLW, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Gujarati */ - /* 0A80 */ O, VMABV, VMABV, VMPST, O, B, B, B, B, B, B, B, B, B, O, B, - /* 0A90 */ B, B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0AA0 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, - /* 0AB0 */ B, O, B, B, O, B, B, B, B, B, O, O, CMBLW, B, VPST, VPRE, - /* 0AC0 */ VPST, VBLW, VBLW, VBLW, VBLW, VABV, O, VABV, VABV, VABV, O, VPST, VPST, H, O, O, - /* 0AD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 0AE0 */ B, B, VBLW, VBLW, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0AF0 */ O, O, O, O, O, O, O, O, O, B, VMABV, VMABV, VMABV, CMABV, CMABV, CMABV, + /* 0A80 */ WJ, VMABV, VMABV, VMPST, WJ, B, B, B, B, B, B, B, B, B, WJ, B, + /* 0A90 */ B, B, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0AA0 */ B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, + /* 0AB0 */ B, WJ, B, B, WJ, B, B, B, B, B, WJ, WJ, CMBLW, B, VPST, VPRE, + /* 0AC0 */ VPST, VBLW, VBLW, VBLW, VBLW, VABV, WJ, VABV, VABV, VABV, WJ, VPST, VPST, H, WJ, WJ, + /* 0AD0 */ O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 0AE0 */ B, B, VBLW, VBLW, WJ, WJ, B, B, B, B, B, B, B, B, B, B, + /* 0AF0 */ O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, B, VMABV, VMABV, VMABV, CMABV, CMABV, CMABV, /* Oriya */ - /* 0B00 */ O, VMABV, VMPST, VMPST, O, B, B, B, B, B, B, B, B, O, O, B, - /* 0B10 */ B, O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0B20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, - /* 0B30 */ B, O, B, B, O, B, B, B, B, B, O, O, CMBLW, B, VPST, VABV, - /* 0B40 */ VPST, VBLW, VBLW, VBLW, VBLW, O, O, VPRE, VPRE, O, O, VPRE, VPRE, H, O, O, - /* 0B50 */ O, O, O, O, O, VABV, VABV, VABV, O, O, O, O, B, B, O, B, - /* 0B60 */ B, B, VBLW, VBLW, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0B70 */ O, B, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 0B00 */ WJ, VMABV, VMPST, VMPST, WJ, B, B, B, B, B, B, B, B, WJ, WJ, B, + /* 0B10 */ B, WJ, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0B20 */ B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, + /* 0B30 */ B, WJ, B, B, WJ, B, B, B, B, B, WJ, WJ, CMBLW, B, VPST, VABV, + /* 0B40 */ VPST, VBLW, VBLW, VBLW, VBLW, WJ, WJ, VPRE, VPRE, WJ, WJ, VPRE, VPRE, H, WJ, WJ, + /* 0B50 */ WJ, WJ, WJ, WJ, WJ, VABV, VABV, VABV, WJ, WJ, WJ, WJ, B, B, WJ, B, + /* 0B60 */ B, B, VBLW, VBLW, WJ, WJ, B, B, B, B, B, B, B, B, B, B, + /* 0B70 */ O, B, O, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Tamil */ - /* 0B80 */ O, O, VMABV, O, O, B, B, B, B, B, B, O, O, O, B, B, - /* 0B90 */ B, O, B, B, B, B, O, O, O, B, B, O, B, O, B, B, - /* 0BA0 */ O, O, O, B, B, O, O, O, B, B, B, O, O, O, B, B, - /* 0BB0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, VPST, VPST, - /* 0BC0 */ VABV, VPST, VPST, O, O, O, VPRE, VPRE, VPRE, O, VPRE, VPRE, VPRE, H, O, O, - /* 0BD0 */ O, O, O, O, O, O, O, VPST, O, O, O, O, O, O, O, O, - /* 0BE0 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0BF0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 0B80 */ WJ, WJ, VMABV, O, WJ, B, B, B, B, B, B, WJ, WJ, WJ, B, B, + /* 0B90 */ B, WJ, B, B, B, B, WJ, WJ, WJ, B, B, WJ, B, WJ, B, B, + /* 0BA0 */ WJ, WJ, WJ, B, B, WJ, WJ, WJ, B, B, B, WJ, WJ, WJ, B, B, + /* 0BB0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, VPST, VPST, + /* 0BC0 */ VABV, VPST, VPST, WJ, WJ, WJ, VPRE, VPRE, VPRE, WJ, VPRE, VPRE, VPRE, H, WJ, WJ, + /* 0BD0 */ O, WJ, WJ, WJ, WJ, WJ, WJ, VPST, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 0BE0 */ WJ, WJ, WJ, WJ, WJ, WJ, B, B, B, B, B, B, B, B, B, B, + /* 0BF0 */ O, O, O, O, O, O, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, /* Telugu */ - /* 0C00 */ VMABV, VMPST, VMPST, VMPST, VMABV, B, B, B, B, B, B, B, B, O, B, B, - /* 0C10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0C20 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, - /* 0C30 */ B, B, B, B, B, B, B, B, B, B, O, O, CMBLW, B, VABV, VABV, - /* 0C40 */ VABV, VPST, VPST, VPST, VPST, O, VABV, VABV, VABV, O, VABV, VABV, VABV, H, O, O, - /* 0C50 */ O, O, O, O, O, VABV, VBLW, O, B, B, B, O, O, O, O, O, - /* 0C60 */ B, B, VBLW, VBLW, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0C70 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 0C00 */ VMABV, VMPST, VMPST, VMPST, VMABV, B, B, B, B, B, B, B, B, WJ, B, B, + /* 0C10 */ B, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0C20 */ B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, + /* 0C30 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, CMBLW, B, VABV, VABV, + /* 0C40 */ VABV, VPST, VPST, VPST, VPST, WJ, VABV, VABV, VABV, WJ, VABV, VABV, VABV, H, WJ, WJ, + /* 0C50 */ WJ, WJ, WJ, WJ, WJ, VABV, VBLW, WJ, B, B, B, WJ, WJ, O, WJ, WJ, + /* 0C60 */ B, B, VBLW, VBLW, WJ, WJ, B, B, B, B, B, B, B, B, B, B, + /* 0C70 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, O, O, O, O, O, O, O, O, O, /* Kannada */ - /* 0C80 */ B, VMABV, VMPST, VMPST, O, B, B, B, B, B, B, B, B, O, B, B, - /* 0C90 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0CA0 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, - /* 0CB0 */ B, B, B, B, O, B, B, B, B, B, O, O, CMBLW, B, VPST, VABV, - /* 0CC0 */ VABV, VPST, VPST, VPST, VPST, O, VABV, VABV, VABV, O, VABV, VABV, VABV, H, O, O, - /* 0CD0 */ O, O, O, O, O, VPST, VPST, O, O, O, O, O, O, O, B, O, - /* 0CE0 */ B, B, VBLW, VBLW, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0CF0 */ O, CS, CS, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 0C80 */ B, VMABV, VMPST, VMPST, O, B, B, B, B, B, B, B, B, WJ, B, B, + /* 0C90 */ B, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0CA0 */ B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, + /* 0CB0 */ B, B, B, B, WJ, B, B, B, B, B, WJ, WJ, CMBLW, B, VPST, VABV, + /* 0CC0 */ VABV, VPST, VPST, VPST, VPST, WJ, VABV, VABV, VABV, WJ, VABV, VABV, VABV, H, WJ, WJ, + /* 0CD0 */ WJ, WJ, WJ, WJ, WJ, VPST, VPST, WJ, WJ, WJ, WJ, WJ, WJ, O, B, WJ, + /* 0CE0 */ B, B, VBLW, VBLW, WJ, WJ, B, B, B, B, B, B, B, B, B, B, + /* 0CF0 */ WJ, CS, CS, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Malayalam */ - /* 0D00 */ VMABV, VMABV, VMPST, VMPST, B, B, B, B, B, B, B, B, B, O, B, B, - /* 0D10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 0D00 */ VMABV, VMABV, VMPST, VMPST, B, B, B, B, B, B, B, B, B, WJ, B, B, + /* 0D10 */ B, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 0D20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 0D30 */ B, B, B, B, B, B, B, B, B, B, B, VABV, VABV, B, VPST, VPST, - /* 0D40 */ VPST, VPST, VPST, VBLW, VBLW, O, VPRE, VPRE, VPRE, O, VPRE, VPRE, VPRE, H, R, O, - /* 0D50 */ O, O, O, O, O, O, O, VPST, O, O, O, O, O, O, O, B, - /* 0D60 */ B, B, VBLW, VBLW, O, O, B, B, B, B, B, B, B, B, B, B, + /* 0D40 */ VPST, VPST, VPST, VBLW, VBLW, WJ, VPRE, VPRE, VPRE, WJ, VPRE, VPRE, VPRE, H, R, O, + /* 0D50 */ WJ, WJ, WJ, WJ, O, O, O, VPST, O, O, O, O, O, O, O, B, + /* 0D60 */ B, B, VBLW, VBLW, WJ, WJ, B, B, B, B, B, B, B, B, B, B, /* 0D70 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, /* Sinhala */ - /* 0D80 */ O, VMABV, VMPST, VMPST, O, B, B, B, B, B, B, B, B, B, B, B, - /* 0D90 */ B, B, B, B, B, B, B, O, O, O, B, B, B, B, B, B, + /* 0D80 */ WJ, VMABV, VMPST, VMPST, WJ, B, B, B, B, B, B, B, B, B, B, B, + /* 0D90 */ B, B, B, B, B, B, B, WJ, WJ, WJ, B, B, B, B, B, B, /* 0DA0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0DB0 */ B, B, O, B, B, B, B, B, B, B, B, B, O, B, O, O, - /* 0DC0 */ B, B, B, B, B, B, B, O, O, O, H, O, O, O, O, VPST, - /* 0DD0 */ VPST, VPST, VABV, VABV, VBLW, O, VBLW, O, VPST, VPRE, VPRE, VPRE, VPRE, VPRE, VPRE, VPST, - /* 0DE0 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B, - /* 0DF0 */ O, O, VPST, VPST, O, O, O, O, + /* 0DB0 */ B, B, WJ, B, B, B, B, B, B, B, B, B, WJ, B, WJ, WJ, + /* 0DC0 */ B, B, B, B, B, B, B, WJ, WJ, WJ, H, WJ, WJ, WJ, WJ, VPST, + /* 0DD0 */ VPST, VPST, VABV, VABV, VBLW, WJ, VBLW, WJ, VPST, VPRE, VPRE, VPRE, VPRE, VPRE, VPRE, VPST, + /* 0DE0 */ WJ, WJ, WJ, WJ, WJ, WJ, B, B, B, B, B, B, B, B, B, B, + /* 0DF0 */ WJ, WJ, VPST, VPST, O, WJ, WJ, WJ, /* Tibetan */ @@ -151,14 +153,14 @@ const USE_TABLE: &[Category] = &[ /* 0F10 */ O, O, O, O, O, O, O, O, VBLW, VBLW, O, O, O, O, O, O, /* 0F20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 0F30 */ B, B, B, B, O, FBLW, O, FBLW, O, CMABV, O, O, O, O, VPST, VPRE, - /* 0F40 */ B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, B, + /* 0F40 */ B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, B, /* 0F50 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 0F60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, - /* 0F70 */ O, CMBLW, VBLW, VABV, VABV, VBLW, VABV, VABV, VABV, VABV, VBLW, VBLW, VBLW, VBLW, VMABV, O, + /* 0F60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, + /* 0F70 */ WJ, CMBLW, VBLW, VABV, VABV, VBLW, VABV, VABV, VABV, VABV, VBLW, VBLW, VBLW, VBLW, VMABV, O, /* 0F80 */ VBLW, VABV, VMABV, VMABV, VBLW, O, VMABV, VMABV, B, B, B, B, B, SUB, SUB, SUB, - /* 0F90 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB, + /* 0F90 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, WJ, SUB, SUB, SUB, SUB, SUB, SUB, SUB, /* 0FA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, - /* 0FB0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, O, O, + /* 0FB0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, WJ, O, O, /* 0FC0 */ O, O, O, O, O, O, FBLW, O, /* Myanmar */ @@ -177,22 +179,22 @@ const USE_TABLE: &[Category] = &[ /* Tagalog */ /* 1700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1710 */ B, B, VABV, VBLW, VBLW, VPST, O, O, O, O, O, O, O, O, O, B, + /* 1710 */ B, B, VABV, VBLW, VBLW, VPST, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, B, /* Hanunoo */ /* 1720 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1730 */ B, B, VABV, VBLW, VPST, O, O, O, O, O, O, O, O, O, O, O, + /* 1730 */ B, B, VABV, VBLW, VPST, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Buhid */ /* 1740 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1750 */ B, B, VABV, VBLW, O, O, O, O, O, O, O, O, O, O, O, O, + /* 1750 */ B, B, VABV, VBLW, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Tagbanwa */ - /* 1760 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, B, B, - /* 1770 */ B, O, VABV, VBLW, O, O, O, O, O, O, O, O, O, O, O, O, + /* 1760 */ B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, B, B, + /* 1770 */ B, WJ, VABV, VBLW, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Khmer */ @@ -201,64 +203,64 @@ const USE_TABLE: &[Category] = &[ /* 17A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 17B0 */ B, B, B, B, CGJ, CGJ, VPST, VABV, VABV, VABV, VABV, VBLW, VBLW, VBLW, VPRE, VPRE, /* 17C0 */ VPRE, VPRE, VPRE, VPRE, VPRE, VPRE, VMABV, VMPST, VPST, VMABV, VMABV, FMABV, FABV, CMABV, FMABV, VMABV, - /* 17D0 */ FMABV, VABV, H, FMABV, O, O, O, O, O, O, O, O, B, FMABV, O, O, - /* 17E0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, - /* 17F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 17D0 */ FMABV, VABV, H, FMABV, O, O, O, O, O, O, O, O, B, FMABV, WJ, WJ, + /* 17E0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, + /* 17F0 */ O, O, O, O, O, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, /* Mongolian */ - /* 1800 */ B, O, O, O, O, O, O, B, O, O, B, CGJ, CGJ, CGJ, O, CGJ, - /* 1810 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 1800 */ B, O, O, O, O, O, O, B, O, O, B, CGJ, CGJ, CGJ, WJ, CGJ, + /* 1810 */ O, O, O, O, O, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, /* 1820 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1830 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1840 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1850 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1860 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1870 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, + /* 1870 */ B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* 1880 */ GB, GB, GB, GB, GB, CMABV, CMABV, B, B, B, B, B, B, B, B, B, /* 1890 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 18A0 */ B, B, B, B, B, B, B, B, B, CMBLW, B, O, O, O, O, O, + /* 18A0 */ B, B, B, B, B, B, B, B, B, CMBLW, B, WJ, WJ, WJ, WJ, WJ, /* Limbu */ /* 1900 */ GB, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1910 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, - /* 1920 */ VABV, VABV, VBLW, VPST, VPST, VABV, VABV, VABV, VABV, SUB, SUB, SUB, O, O, O, O, - /* 1930 */ FPST, FPST, VMBLW, FPST, FPST, FPST, FPST, FPST, FPST, FBLW, VMABV, FMBLW, O, O, O, O, - /* 1940 */ O, O, O, O, O, O, B, B, B, B, B, B, B, B, B, B, + /* 1910 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, + /* 1920 */ VABV, VABV, VBLW, VPST, VPST, VABV, VABV, VABV, VABV, SUB, SUB, SUB, WJ, WJ, WJ, WJ, + /* 1930 */ FPST, FPST, VMBLW, FPST, FPST, FPST, FPST, FPST, FPST, FBLW, VMABV, FMBLW, WJ, WJ, WJ, WJ, + /* 1940 */ O, WJ, WJ, WJ, O, O, B, B, B, B, B, B, B, B, B, B, /* Tai Le */ /* 1950 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1960 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, - /* 1970 */ B, B, B, B, B, O, O, O, O, O, O, O, O, O, O, O, + /* 1960 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, + /* 1970 */ B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* New Tai Lue */ /* 1980 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1990 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 19A0 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, + /* 19A0 */ B, B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, /* 19B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 19C0 */ B, B, B, B, B, B, B, B, VMPST, VMPST, O, O, O, O, O, O, - /* 19D0 */ B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, + /* 19C0 */ B, B, B, B, B, B, B, B, VMPST, VMPST, WJ, WJ, WJ, WJ, WJ, WJ, + /* 19D0 */ B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, O, O, /* 19E0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, /* 19F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, /* Buginese */ /* 1A00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1A10 */ B, B, B, B, B, B, B, VABV, VABV, VPRE, VPST, VABV, O, O, O, O, + /* 1A10 */ B, B, B, B, B, B, B, VABV, VABV, VPRE, VPST, VABV, WJ, WJ, O, O, /* Tai Tham */ /* 1A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1A30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1A40 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1A50 */ B, B, B, B, B, MPRE, MBLW, SUB, FABV, FABV, MABV, SUB, SUB, SUB, SUB, O, + /* 1A50 */ B, B, B, B, B, MPRE, MBLW, SUB, FABV, FABV, MABV, SUB, SUB, SUB, SUB, WJ, /* 1A60 */ SK, VPST, VABV, VPST, VPST, VABV, VABV, VABV, VABV, VBLW, VBLW, VABV, VBLW, VPST, VPRE, VPRE, - /* 1A70 */ VPRE, VPRE, VPRE, VABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VABV, VMABV, VMABV, O, O, VMBLW, - /* 1A80 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, - /* 1A90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 1A70 */ VPRE, VPRE, VPRE, VABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VABV, VMABV, VMABV, WJ, WJ, VMBLW, + /* 1A80 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, + /* 1A90 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Balinese */ @@ -266,10 +268,10 @@ const USE_TABLE: &[Category] = &[ /* 1B10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1B20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1B30 */ B, B, B, B, CMABV, VPST, VABV, VABV, VBLW, VBLW, VBLW, VBLW, VABV, VABV, VPRE, VPRE, - /* 1B40 */ VPRE, VPRE, VABV, VABV, H, B, B, B, B, B, B, B, B, O, O, O, - /* 1B50 */ B, B, B, B, B, B, B, B, B, B, O, GB, GB, O, O, GB, - /* 1B60 */ O, O, GB, O, O, O, O, O, GB, O, O, SMABV, SMBLW, SMABV, SMABV, SMABV, - /* 1B70 */ SMABV, SMABV, SMABV, SMABV, O, O, O, O, O, O, O, O, O, O, O, O, + /* 1B40 */ VPRE, VPRE, VABV, VABV, H, B, B, B, B, B, B, B, B, WJ, WJ, WJ, + /* 1B50 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 1B60 */ O, O, O, O, O, O, O, O, O, O, O, SMABV, SMBLW, SMABV, SMABV, SMABV, + /* 1B70 */ SMABV, SMABV, SMABV, SMABV, O, O, O, O, O, O, O, O, O, O, O, WJ, /* Sundanese */ @@ -283,37 +285,42 @@ const USE_TABLE: &[Category] = &[ /* 1BC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1BD0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1BE0 */ B, B, B, B, B, B, CMABV, VPST, VABV, VABV, VPST, VPST, VPST, VABV, VPST, VABV, - /* 1BF0 */ FABV, FABV, CMBLW, CMBLW, O, O, O, O, O, O, O, O, O, O, O, O, + /* 1BF0 */ FABV, FABV, CMBLW, CMBLW, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, O, O, O, O, /* Lepcha */ /* 1C00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1C10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1C20 */ B, B, B, B, SUB, SUB, VPST, VPRE, VPRE, VPRE, VPST, VPST, VBLW, FABV, FABV, FABV, - /* 1C30 */ FABV, FABV, FABV, FABV, VMPRE, VMPRE, FMABV, CMBLW, O, O, O, O, O, O, O, O, - /* 1C40 */ B, B, B, B, B, B, B, B, B, B, O, O, O, B, B, B, + /* 1C30 */ FABV, FABV, FABV, FABV, VMPRE, VMPRE, FMABV, CMBLW, WJ, WJ, WJ, O, O, O, O, O, + /* 1C40 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, B, B, B, /* Vedic Extensions */ /* 1CD0 */ VMABV, VMABV, VMABV, O, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMABV, VMABV, VMBLW, VMBLW, VMBLW, VMBLW, /* 1CE0 */ VMABV, VMPST, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, O, O, O, O, VMBLW, O, O, - /* 1CF0 */ O, O, O, O, VMABV, CS, CS, VMPST, VMABV, VMABV, GB, O, O, O, O, O, + /* 1CF0 */ O, O, O, O, VMABV, CS, CS, VMPST, VMABV, VMABV, GB, WJ, WJ, WJ, WJ, WJ, /* Combining Diacritical Marks Supplement */ O, O, O, FMABV, O, O, O, O, /* General Punctuation */ - O, O, O, O, ZWNJ, CGJ, O, O, - /* 2010 */ GB, GB, GB, GB, GB, O, O, O, + O, O, O, WJ, ZWNJ, CGJ, WJ, WJ, + /* 2010 */ GB, GB, GB, GB, GB, O, O, O, O, O, O, O, O, O, O, O, + /* 2020 */ O, O, O, O, O, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, O, + /* 2030 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 2040 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 2050 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 2060 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Superscripts and Subscripts */ - /* 2070 */ O, O, O, O, FMPST, O, O, O, O, O, O, O, O, O, O, O, + /* 2070 */ O, O, WJ, WJ, FMPST, O, O, O, O, O, O, O, O, O, O, O, /* 2080 */ O, O, FMPST, FMPST, FMPST, O, O, O, /* Combining Diacritical Marks for Symbols */ - /* 20F0 */ VMABV, O, O, O, O, O, O, O, + /* 20F0 */ VMABV, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Geometric Shapes */ O, O, O, O, B, O, O, O, @@ -323,22 +330,22 @@ const USE_TABLE: &[Category] = &[ /* 2D30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 2D40 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 2D50 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 2D60 */ B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, B, - /* 2D70 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, H, + /* 2D60 */ B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, B, + /* 2D70 */ O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, H, /* Syloti Nagri */ /* A800 */ B, B, VABV, B, B, B, H, B, B, B, B, VMABV, B, B, B, B, /* A810 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* A820 */ B, B, B, VPST, VPST, VBLW, VABV, VPST, O, O, O, O, VBLW, O, O, O, - /* A830 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* A820 */ B, B, B, VPST, VPST, VBLW, VABV, VPST, O, O, O, O, VBLW, WJ, WJ, WJ, + /* A830 */ O, O, O, O, O, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, /* Phags-pa */ /* A840 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* A850 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* A860 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* A870 */ B, B, B, B, O, O, O, O, O, O, O, O, O, O, O, O, + /* A870 */ B, B, B, B, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Saurashtra */ @@ -346,8 +353,8 @@ const USE_TABLE: &[Category] = &[ /* A890 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* A8A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* A8B0 */ B, B, B, B, MPST, VPST, VPST, VPST, VPST, VPST, VPST, VPST, VPST, VPST, VPST, VPST, - /* A8C0 */ VPST, VPST, VPST, VPST, H, VMABV, O, O, O, O, O, O, O, O, O, O, - /* A8D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* A8C0 */ VPST, VPST, VPST, VPST, H, VMABV, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, O, O, + /* A8D0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Devanagari Extended */ @@ -364,9 +371,9 @@ const USE_TABLE: &[Category] = &[ /* A930 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* A940 */ B, B, B, B, B, B, B, VBLW, VBLW, VBLW, VABV, VBLW, VBLW, VBLW, VBLW, FABV, - /* A950 */ FABV, FABV, FPST, VPST, O, O, O, O, O, O, O, O, O, O, O, O, + /* A950 */ FABV, FABV, FPST, VPST, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, O, /* A960 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* A970 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* A970 */ O, O, O, O, O, O, O, O, O, O, O, O, O, WJ, WJ, WJ, /* Javanese */ @@ -374,22 +381,22 @@ const USE_TABLE: &[Category] = &[ /* A990 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* A9A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* A9B0 */ B, B, B, CMABV, VPST, VPST, VABV, VABV, VBLW, VBLW, VPRE, VPRE, VABV, MBLW, MPST, MBLW, - /* A9C0 */ H, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* A9D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* A9C0 */ H, O, O, O, O, O, O, O, O, O, O, O, O, O, WJ, O, + /* A9D0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, O, O, /* Myanmar Extended-B */ /* A9E0 */ B, B, B, B, B, VABV, O, B, B, B, B, B, B, B, B, B, - /* A9F0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, + /* A9F0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, /* Cham */ /* AA00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* AA10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* AA20 */ B, B, B, B, B, B, B, B, B, VMABV, VABV, VABV, VABV, VBLW, VABV, VPRE, - /* AA30 */ VPRE, VABV, VBLW, MPST, MPRE, MABV, MBLW, O, O, O, O, O, O, O, O, O, - /* AA40 */ B, B, B, FABV, B, B, B, B, B, B, B, B, FABV, FPST, O, O, - /* AA50 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* AA30 */ VPRE, VABV, VBLW, MPST, MPRE, MABV, MBLW, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* AA40 */ B, B, B, FABV, B, B, B, B, B, B, B, B, FABV, FPST, WJ, WJ, + /* AA50 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, O, O, O, O, /* Myanmar Extended-A */ @@ -402,88 +409,95 @@ const USE_TABLE: &[Category] = &[ /* AA90 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* AAA0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* AAB0 */ VABV, B, VABV, VABV, VBLW, B, B, VABV, VABV, B, B, B, B, B, VABV, VMABV, - /* AAC0 */ B, VMABV, B, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* AAD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* AAC0 */ B, VMABV, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* AAD0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, O, O, O, O, O, /* Meetei Mayek Extensions */ /* AAE0 */ B, B, B, B, B, B, B, B, B, B, B, VPRE, VBLW, VABV, VPRE, VPST, - /* AAF0 */ O, O, O, O, O, VMPST, H, O, + /* AAF0 */ O, O, O, O, O, VMPST, H, WJ, /* Meetei Mayek */ /* ABC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* ABD0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* ABE0 */ B, B, B, VPST, VPST, VABV, VPST, VPST, VBLW, VPST, VPST, O, VMPST, VBLW, O, O, - /* ABF0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* ABE0 */ B, B, B, VPST, VPST, VABV, VPST, VPST, VBLW, VPST, VPST, O, VMPST, VBLW, WJ, WJ, + /* ABF0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Variation Selectors */ /* FE00 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, + /* Arabic Presentation Forms-B */ + O, O, O, O, O, WJ, WJ, WJ, + + /* Specials */ + + /* FFF0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, O, O, O, O, O, WJ, WJ, + /* Vithkuqi */ - /* 10570 */ B, B, B, B, B, B, B, B, B, B, B, O, B, B, B, B, - /* 10580 */ B, B, B, B, B, B, B, B, B, B, B, O, B, B, B, B, - /* 10590 */ B, B, B, O, B, B, O, B, B, B, B, B, B, B, B, B, - /* 105A0 */ B, B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 105B0 */ B, B, O, B, B, B, B, B, B, B, O, B, B, O, O, O, + /* 10570 */ B, B, B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, + /* 10580 */ B, B, B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, + /* 10590 */ B, B, B, WJ, B, B, WJ, B, B, B, B, B, B, B, B, B, + /* 105A0 */ B, B, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 105B0 */ B, B, WJ, B, B, B, B, B, B, B, WJ, B, B, WJ, WJ, WJ, /* Kharoshthi */ - /* 10A00 */ B, VBLW, VBLW, VBLW, O, VABV, VBLW, O, O, O, O, O, VPST, VMBLW, VMBLW, VMABV, - /* 10A10 */ B, B, B, B, O, B, B, B, O, B, B, B, B, B, B, B, + /* 10A00 */ B, VBLW, VBLW, VBLW, WJ, VABV, VBLW, WJ, WJ, WJ, WJ, WJ, VPST, VMBLW, VMBLW, VMABV, + /* 10A10 */ B, B, B, B, WJ, B, B, B, WJ, B, B, B, B, B, B, B, /* 10A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 10A30 */ B, B, B, B, B, B, O, O, CMABV, CMBLW, CMBLW, O, O, O, O, H, - /* 10A40 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, + /* 10A30 */ B, B, B, B, B, B, WJ, WJ, CMABV, CMBLW, CMBLW, WJ, WJ, WJ, WJ, H, + /* 10A40 */ B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Manichaean */ /* 10AC0 */ B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, B, /* 10AD0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 10AE0 */ B, B, B, B, B, CMBLW, CMBLW, O, O, O, O, B, B, B, B, B, + /* 10AE0 */ B, B, B, B, B, CMBLW, CMBLW, WJ, WJ, WJ, WJ, B, B, B, B, B, /* Psalter Pahlavi */ /* 10B80 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 10B90 */ B, B, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 10BA0 */ O, O, O, O, O, O, O, O, O, B, B, B, B, B, B, O, + /* 10B90 */ B, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, O, O, O, O, WJ, WJ, WJ, + /* 10BA0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, B, B, B, B, B, B, O, /* Hanifi Rohingya */ /* 10D00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 10D10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 10D20 */ B, B, B, B, VMABV, VMABV, VMABV, CMABV, O, O, O, O, O, O, O, O, - /* 10D30 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 10D20 */ B, B, B, B, VMABV, VMABV, VMABV, CMABV, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 10D30 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Yezidi */ /* 10E80 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 10E90 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 10EA0 */ B, B, B, B, B, B, B, B, B, B, O, VABV, VABV, O, O, O, - /* 10EB0 */ B, B, O, O, O, O, O, O, + /* 10EA0 */ B, B, B, B, B, B, B, B, B, B, WJ, VABV, VABV, O, WJ, WJ, + /* 10EB0 */ B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Sogdian */ /* 10F30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 10F40 */ B, B, B, B, B, B, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, VMBLW, - /* 10F50 */ VMBLW, B, B, B, B, O, O, O, O, O, O, O, O, O, O, O, - /* 10F60 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 10F50 */ VMBLW, B, B, B, B, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, + /* 10F60 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Old Uyghur */ /* 10F70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 10F80 */ B, B, CMBLW, CMBLW, CMBLW, CMBLW, O, O, O, O, O, O, O, O, O, O, - /* 10F90 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 10FA0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 10F80 */ B, B, CMBLW, CMBLW, CMBLW, CMBLW, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, + /* 10F90 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 10FA0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Chorasmian */ /* 10FB0 */ B, O, B, B, B, B, B, O, B, B, B, B, B, B, B, B, - /* 10FC0 */ O, B, B, B, B, O, O, O, O, B, B, B, O, O, O, O, - /* 10FD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 10FC0 */ O, B, B, B, B, O, O, O, O, B, B, B, WJ, WJ, WJ, WJ, + /* 10FD0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* 10FE0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 10FF0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 10FF0 */ O, O, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Brahmi */ @@ -491,10 +505,10 @@ const USE_TABLE: &[Category] = &[ /* 11010 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11020 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11030 */ B, B, B, B, B, B, B, B, VABV, VABV, VABV, VABV, VBLW, VBLW, VBLW, VBLW, - /* 11040 */ VBLW, VBLW, VABV, VABV, VABV, VABV, H, O, O, O, O, O, O, O, O, O, - /* 11050 */ O, O, N, N, N, N, N, N, N, N, N, N, N, N, N, N, + /* 11040 */ VBLW, VBLW, VABV, VABV, VABV, VABV, H, O, O, O, O, O, O, O, WJ, WJ, + /* 11050 */ WJ, WJ, N, N, N, N, N, N, N, N, N, N, N, N, N, N, /* 11060 */ N, N, N, N, N, N, B, B, B, B, B, B, B, B, B, B, - /* 11070 */ VABV, B, B, VABV, VABV, B, O, O, O, O, O, O, O, O, O, HN, + /* 11070 */ VABV, B, B, VABV, VABV, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, HN, /* Kaithi */ @@ -502,21 +516,21 @@ const USE_TABLE: &[Category] = &[ /* 11090 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 110A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 110B0 */ VPST, VPRE, VPST, VBLW, VBLW, VABV, VABV, VPST, VPST, H, CMBLW, O, O, O, O, O, - /* 110C0 */ O, O, VBLW, O, O, O, O, O, + /* 110C0 */ O, O, VBLW, WJ, WJ, WJ, WJ, WJ, /* Chakma */ /* 11100 */ VMABV, VMABV, VMABV, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11110 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11120 */ B, B, B, B, B, B, B, VBLW, VBLW, VBLW, VABV, VABV, VPRE, VBLW, VABV, VABV, - /* 11130 */ VBLW, VABV, VABV, H, CMABV, O, B, B, B, B, B, B, B, B, B, B, - /* 11140 */ O, O, O, O, B, VPST, VPST, B, O, O, O, O, O, O, O, O, + /* 11130 */ VBLW, VABV, VABV, H, CMABV, WJ, B, B, B, B, B, B, B, B, B, B, + /* 11140 */ O, O, O, O, B, VPST, VPST, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Mahajani */ /* 11150 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11160 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11170 */ B, B, B, CMBLW, O, O, O, O, O, O, O, O, O, O, O, O, + /* 11170 */ B, B, B, CMBLW, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Sharada */ @@ -524,45 +538,45 @@ const USE_TABLE: &[Category] = &[ /* 11190 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 111A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 111B0 */ B, B, B, VPST, VPRE, VPST, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VABV, VABV, VABV, VABV, - /* 111C0 */ H, B, R, R, O, O, O, O, GB, FMBLW, CMBLW, VABV, VBLW, O, VPRE, VMABV, + /* 111C0 */ H, B, R, R, O, O, O, O, O, FMBLW, CMBLW, VABV, VBLW, O, VPRE, VMABV, /* 111D0 */ B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, /* Sinhala Archaic Numbers */ - /* 111E0 */ O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 111F0 */ B, B, B, B, B, O, O, O, O, O, O, O, O, O, O, O, + /* 111E0 */ WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 111F0 */ B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Khojki */ /* 11200 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11210 */ B, B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11210 */ B, B, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11220 */ B, B, B, B, B, B, B, B, B, B, B, B, VPST, VPST, VPST, VBLW, - /* 11230 */ VABV, VABV, VABV, VABV, VMABV, H, CMABV, CMABV, O, O, O, O, O, O, VMABV, O, + /* 11230 */ VABV, VABV, VABV, VABV, VMABV, H, CMABV, CMABV, O, O, O, O, O, O, VMABV, WJ, /* Multani */ - /* 11280 */ B, B, B, B, B, B, B, O, B, O, B, B, B, B, O, B, - /* 11290 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, B, - /* 112A0 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, + /* 11280 */ B, B, B, B, B, B, B, WJ, B, WJ, B, B, B, B, WJ, B, + /* 11290 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, B, + /* 112A0 */ B, B, B, B, B, B, B, B, B, O, WJ, WJ, WJ, WJ, WJ, WJ, /* Khudawadi */ /* 112B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 112C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 112D0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, VMABV, - /* 112E0 */ VPST, VPRE, VPST, VBLW, VBLW, VABV, VABV, VABV, VABV, CMBLW, VBLW, O, O, O, O, O, - /* 112F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 112E0 */ VPST, VPRE, VPST, VBLW, VBLW, VABV, VABV, VABV, VABV, CMBLW, VBLW, WJ, WJ, WJ, WJ, WJ, + /* 112F0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Grantha */ - /* 11300 */ VMABV, VMABV, VMABV, VMABV, O, B, B, B, B, B, B, B, B, O, O, B, - /* 11310 */ B, O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11320 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, - /* 11330 */ B, O, B, B, O, B, B, B, B, B, O, CMBLW, CMBLW, B, VPST, VPST, - /* 11340 */ VABV, VPST, VPST, VPST, VPST, O, O, VPRE, VPRE, O, O, VPRE, VPRE, HVM, O, O, - /* 11350 */ O, O, O, O, O, O, O, VPST, O, O, O, O, O, O, B, B, - /* 11360 */ B, B, VPST, VPST, O, O, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, O, O, O, - /* 11370 */ VMABV, VMABV, VMABV, VMABV, VMABV, O, O, O, + /* 11300 */ VMABV, VMABV, VMABV, VMABV, WJ, B, B, B, B, B, B, B, B, WJ, WJ, B, + /* 11310 */ B, WJ, WJ, B, B, B, B, B, B, B, B, B, B, B, B, B, + /* 11320 */ B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, + /* 11330 */ B, WJ, B, B, WJ, B, B, B, B, B, WJ, CMBLW, CMBLW, B, VPST, VPST, + /* 11340 */ VABV, VPST, VPST, VPST, VPST, WJ, WJ, VPRE, VPRE, WJ, WJ, VPRE, VPRE, HVM, WJ, WJ, + /* 11350 */ O, WJ, WJ, WJ, WJ, WJ, WJ, VPST, WJ, WJ, WJ, WJ, WJ, O, B, B, + /* 11360 */ B, B, VPST, VPST, WJ, WJ, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, WJ, WJ, WJ, + /* 11370 */ VMABV, VMABV, VMABV, VMABV, VMABV, WJ, WJ, WJ, /* Newa */ @@ -571,9 +585,9 @@ const USE_TABLE: &[Category] = &[ /* 11420 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11430 */ B, B, B, B, B, VPST, VPRE, VPST, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VABV, VABV, /* 11440 */ VPST, VPST, H, VMABV, VMABV, VMPST, CMBLW, B, O, O, O, O, O, O, O, O, - /* 11450 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, FMABV, B, - /* 11460 */ CS, CS, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 11470 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 11450 */ B, B, B, B, B, B, B, B, B, B, O, O, WJ, O, FMABV, B, + /* 11460 */ CS, CS, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 11470 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Tirhuta */ @@ -581,19 +595,19 @@ const USE_TABLE: &[Category] = &[ /* 11490 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 114A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 114B0 */ VPST, VPRE, VPST, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VPRE, VABV, VPRE, VPRE, VPST, VPRE, VMABV, - /* 114C0 */ VMABV, VMABV, H, CMBLW, B, O, O, O, O, O, O, O, O, O, O, O, - /* 114D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 114C0 */ VMABV, VMABV, H, CMBLW, B, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 114D0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Siddham */ /* 11580 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11590 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 115A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, VPST, - /* 115B0 */ VPRE, VPST, VBLW, VBLW, VBLW, VBLW, O, O, VPRE, VPRE, VPRE, VPRE, VMABV, VMABV, VMPST, H, + /* 115B0 */ VPRE, VPST, VBLW, VBLW, VBLW, VBLW, WJ, WJ, VPRE, VPRE, VPRE, VPRE, VMABV, VMABV, VMPST, H, /* 115C0 */ CMBLW, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 115D0 */ O, O, O, O, O, O, O, O, B, B, B, B, VBLW, VBLW, O, O, - /* 115E0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 115F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 115D0 */ O, O, O, O, O, O, O, O, B, B, B, B, VBLW, VBLW, WJ, WJ, + /* 115E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 115F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Modi */ @@ -601,54 +615,54 @@ const USE_TABLE: &[Category] = &[ /* 11610 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11620 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11630 */ VPST, VPST, VPST, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VABV, VABV, VPST, VPST, VMABV, VMPST, H, - /* 11640 */ VABV, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 11650 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, - /* 11660 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 11670 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 11640 */ VABV, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 11650 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, + /* 11660 */ O, O, O, O, O, O, O, O, O, O, O, O, O, WJ, WJ, WJ, + /* 11670 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Takri */ /* 11680 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11690 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 116A0 */ B, B, B, B, B, B, B, B, B, B, B, VMABV, VMPST, VABV, VPRE, VPST, - /* 116B0 */ VBLW, VBLW, VABV, VABV, VABV, VABV, H, CMBLW, B, O, O, O, O, O, O, O, - /* 116C0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, - /* 116D0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 116E0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 116F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 116B0 */ VBLW, VBLW, VABV, VABV, VABV, VABV, H, CMBLW, B, O, WJ, WJ, WJ, WJ, WJ, WJ, + /* 116C0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, + /* 116D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 116E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 116F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Ahom */ /* 11700 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11710 */ B, B, B, B, B, B, B, B, B, B, B, O, O, MBLW, MPRE, MABV, - /* 11720 */ VPST, VPST, VABV, VABV, VBLW, VBLW, VPRE, VABV, VBLW, VABV, VABV, VABV, O, O, O, O, + /* 11710 */ B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, MBLW, MPRE, MABV, + /* 11720 */ VPST, VPST, VABV, VABV, VBLW, VBLW, VPRE, VABV, VBLW, VABV, VABV, VABV, WJ, WJ, WJ, WJ, /* 11730 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, - /* 11740 */ B, B, B, B, B, B, B, O, + /* 11740 */ B, B, B, B, B, B, B, WJ, /* Dogra */ /* 11800 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11810 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11820 */ B, B, B, B, B, B, B, B, B, B, B, B, VPST, VPRE, VPST, VBLW, - /* 11830 */ VBLW, VBLW, VBLW, VABV, VABV, VABV, VABV, VMABV, VMPST, H, CMBLW, O, O, O, O, O, + /* 11830 */ VBLW, VBLW, VBLW, VABV, VABV, VABV, VABV, VMABV, VMPST, H, CMBLW, O, WJ, WJ, WJ, WJ, /* Dives Akuru */ - /* 11900 */ B, B, B, B, B, B, B, O, O, B, O, O, B, B, B, B, - /* 11910 */ B, B, B, B, O, B, B, O, B, B, B, B, B, B, B, B, + /* 11900 */ B, B, B, B, B, B, B, WJ, WJ, B, WJ, WJ, B, B, B, B, + /* 11910 */ B, B, B, B, WJ, B, B, WJ, B, B, B, B, B, B, B, B, /* 11920 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11930 */ VPST, VPST, VPST, VPST, VPST, VPRE, O, VPRE, VPRE, O, O, VMABV, VMABV, VPST, H, R, - /* 11940 */ MPST, R, MPST, CMBLW, O, O, O, O, O, O, O, O, O, O, O, O, - /* 11950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 11930 */ VPST, VPST, VPST, VPST, VPST, VPRE, WJ, VPRE, VPRE, WJ, WJ, VMABV, VMABV, VPST, H, R, + /* 11940 */ MPST, R, MPST, CMBLW, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 11950 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Nandinagari */ - /* 119A0 */ B, B, B, B, B, B, B, B, O, O, B, B, B, B, B, B, + /* 119A0 */ B, B, B, B, B, B, B, B, WJ, WJ, B, B, B, B, B, B, /* 119B0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 119C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 119D0 */ B, VPST, VPRE, VPST, VBLW, VBLW, VBLW, VBLW, O, O, VABV, VABV, VPST, VPST, VMPST, VMPST, - /* 119E0 */ H, B, O, O, VPRE, O, O, O, O, O, O, O, O, O, O, O, - /* 119F0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 119D0 */ B, VPST, VPRE, VPST, VBLW, VBLW, VBLW, VBLW, WJ, WJ, VABV, VABV, VPST, VPST, VMPST, VMPST, + /* 119E0 */ H, B, O, O, VPRE, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 119F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Zanabazar Square */ @@ -656,7 +670,7 @@ const USE_TABLE: &[Category] = &[ /* 11A10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11A30 */ B, B, B, FMBLW, VBLW, VMABV, VMABV, VMABV, VMABV, VMPST, R, MBLW, MBLW, MBLW, MBLW, GB, - /* 11A40 */ O, O, O, O, O, GB, O, H, O, O, O, O, O, O, O, O, + /* 11A40 */ O, O, O, O, O, GB, O, H, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Soyombo */ @@ -668,38 +682,38 @@ const USE_TABLE: &[Category] = &[ /* Bhaiksuki */ - /* 11C00 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B, + /* 11C00 */ B, B, B, B, B, B, B, B, B, WJ, B, B, B, B, B, B, /* 11C10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11C20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, VPST, - /* 11C30 */ VABV, VABV, VBLW, VBLW, VBLW, VBLW, VBLW, O, VABV, VABV, VABV, VABV, VMABV, VMABV, VMPST, H, - /* 11C40 */ B, O, O, O, GB, GB, O, O, O, O, O, O, O, O, O, O, + /* 11C30 */ VABV, VABV, VBLW, VBLW, VBLW, VBLW, VBLW, WJ, VABV, VABV, VABV, VABV, VMABV, VMABV, VMPST, H, + /* 11C40 */ B, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* 11C50 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11C60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, + /* 11C60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, /* Marchen */ /* 11C70 */ O, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11C80 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11C90 */ O, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, - /* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB, - /* 11CB0 */ VBLW, VPRE, VBLW, VABV, VPST, VMABV, VMABV, O, + /* 11C90 */ WJ, WJ, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, + /* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, WJ, SUB, SUB, SUB, SUB, SUB, SUB, SUB, + /* 11CB0 */ VBLW, VPRE, VBLW, VABV, VPST, VMABV, VMABV, WJ, /* Masaram Gondi */ - /* 11D00 */ B, B, B, B, B, B, B, O, B, B, O, B, B, B, B, B, + /* 11D00 */ B, B, B, B, B, B, B, WJ, B, B, WJ, B, B, B, B, B, /* 11D10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 11D20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11D30 */ B, VABV, VABV, VABV, VABV, VABV, VBLW, O, O, O, VABV, O, VABV, VABV, O, VABV, - /* 11D40 */ VMABV, VMABV, CMBLW, VABV, VBLW, H, R, MBLW, O, O, O, O, O, O, O, O, - /* 11D50 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 11D30 */ B, VABV, VABV, VABV, VABV, VABV, VBLW, WJ, WJ, WJ, VABV, WJ, VABV, VABV, WJ, VABV, + /* 11D40 */ VMABV, VMABV, CMBLW, VABV, VBLW, H, R, MBLW, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 11D50 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Gunjala Gondi */ - /* 11D60 */ B, B, B, B, B, B, O, B, B, O, B, B, B, B, B, B, + /* 11D60 */ B, B, B, B, B, B, WJ, B, B, WJ, B, B, B, B, B, B, /* 11D70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 11D80 */ B, B, B, B, B, B, B, B, B, B, VPST, VPST, VPST, VPST, VPST, O, - /* 11D90 */ VABV, VABV, O, VPST, VPST, VMABV, VMPST, H, O, O, O, O, O, O, O, O, - /* 11DA0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 11D80 */ B, B, B, B, B, B, B, B, B, B, VPST, VPST, VPST, VPST, VPST, WJ, + /* 11D90 */ VABV, VABV, WJ, VPST, VPST, VMABV, VMPST, H, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 11DA0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* Makasar */ @@ -774,18 +788,18 @@ const USE_TABLE: &[Category] = &[ /* 133F0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 13400 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 13410 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 13420 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, O, + /* 13420 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, /* Egyptian Hieroglyph Format Controls */ - /* 13430 */ H, H, H, H, H, H, H, B, B, O, O, O, O, O, O, O, + /* 13430 */ H, H, H, H, H, H, H, B, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Tangsa */ - /* 16AC0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 16AC0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, /* 16AD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 16AE0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, - /* 16AF0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 16AE0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, WJ, WJ, + /* 16AF0 */ O, O, O, O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Pahawh Hmong */ @@ -800,16 +814,16 @@ const USE_TABLE: &[Category] = &[ /* 16F10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 16F20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 16F30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 16F40 */ B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, CMBLW, + /* 16F40 */ B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, CMBLW, /* 16F50 */ O, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, /* 16F60 */ VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, /* 16F70 */ VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, - /* 16F80 */ VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, O, O, O, O, O, O, O, VMBLW, + /* 16F80 */ VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, VBLW, WJ, WJ, WJ, WJ, WJ, WJ, WJ, VMBLW, /* 16F90 */ VMBLW, VMBLW, VMBLW, O, O, O, O, O, /* Ideographic Symbols and Punctuation */ - /* 16FE0 */ O, O, O, O, B, O, O, O, + /* 16FE0 */ O, O, O, O, B, WJ, WJ, WJ, /* Khitan Small Script */ @@ -842,7 +856,7 @@ const USE_TABLE: &[Category] = &[ /* 18CA0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 18CB0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 18CC0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 18CD0 */ B, B, B, B, B, B, O, O, + /* 18CD0 */ B, B, B, B, B, B, WJ, WJ, /* Duployan */ @@ -852,31 +866,35 @@ const USE_TABLE: &[Category] = &[ /* 1BC30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1BC40 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1BC50 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1BC60 */ B, B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, - /* 1BC70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, - /* 1BC80 */ B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, O, - /* 1BC90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, CMBLW, CMBLW, O, + /* 1BC60 */ B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, + /* 1BC70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, + /* 1BC80 */ B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* 1BC90 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, O, CMBLW, CMBLW, O, + + /* Musical Symbols */ + + /* 1D170 */ O, O, O, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, O, O, O, O, O, /* Nyiakeng Puachue Hmong */ /* 1E100 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1E110 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1E120 */ B, B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, - /* 1E130 */ VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, B, B, B, B, B, B, B, O, O, - /* 1E140 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, B, B, + /* 1E120 */ B, B, B, B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, + /* 1E130 */ VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, VMABV, B, B, B, B, B, B, B, WJ, WJ, + /* 1E140 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, B, B, /* Toto */ /* 1E290 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1E2A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, VMABV, O, - /* 1E2B0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, + /* 1E2A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, VMABV, WJ, + /* 1E2B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Wancho */ /* 1E2C0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1E2D0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1E2E0 */ B, B, B, B, B, B, B, B, B, B, B, B, VMABV, VMABV, VMABV, VMABV, - /* 1E2F0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 1E2F0 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, WJ, O, /* Adlam */ @@ -884,8 +902,30 @@ const USE_TABLE: &[Category] = &[ /* 1E910 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1E920 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, /* 1E930 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, - /* 1E940 */ B, B, B, B, CMABV, CMABV, CMABV, CMABV, CMABV, CMABV, CMABV, B, O, O, O, O, - /* 1E950 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O, + /* 1E940 */ B, B, B, B, CMABV, CMABV, CMABV, CMABV, CMABV, CMABV, CMABV, B, WJ, WJ, WJ, WJ, + /* 1E950 */ B, B, B, B, B, B, B, B, B, B, WJ, WJ, WJ, WJ, O, O, + + /* Tags */ + + /* E0000 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0010 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0020 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0030 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0040 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0050 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0060 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0070 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + + /* No_Block */ + + /* E0080 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0090 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E00A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E00B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E00C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E00D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E00E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E00F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, /* Variation Selectors Supplement */ @@ -905,6 +945,234 @@ const USE_TABLE: &[Category] = &[ /* E01D0 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, /* E01E0 */ CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, CGJ, + /* No_Block */ + + /* E01F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0200 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0210 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0220 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0230 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0240 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0250 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0260 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0270 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0280 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0290 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E02A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E02B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E02C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E02D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E02E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E02F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0300 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0310 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0320 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0330 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0340 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0350 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0360 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0370 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0380 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0390 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E03A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E03B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E03C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E03D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E03E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E03F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0400 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0410 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0420 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0430 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0440 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0450 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0460 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0470 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0480 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0490 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E04A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E04B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E04C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E04D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E04E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E04F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0500 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0510 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0520 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0530 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0540 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0550 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0560 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0570 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0580 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0590 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E05A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E05B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E05C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E05D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E05E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E05F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0600 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0610 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0620 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0630 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0640 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0650 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0660 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0670 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0680 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0690 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E06A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E06B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E06C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E06D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E06E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E06F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0700 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0710 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0720 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0730 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0740 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0750 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0760 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0770 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0780 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0790 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E07A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E07B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E07C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E07D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E07E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E07F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0800 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0810 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0820 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0830 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0840 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0850 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0860 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0870 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0880 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0890 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E08A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E08B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E08C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E08D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E08E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E08F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0900 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0910 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0920 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0930 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0940 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0950 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0960 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0970 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0980 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0990 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E09A0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E09B0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E09C0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E09D0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E09E0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E09F0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A00 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A10 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A20 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A30 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A40 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A50 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A60 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A70 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A80 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0A90 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0AA0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0AB0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0AC0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0AD0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0AE0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0AF0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B00 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B10 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B20 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B30 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B40 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B50 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B60 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B70 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B80 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0B90 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0BA0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0BB0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0BC0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0BD0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0BE0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0BF0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C00 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C10 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C20 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C30 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C40 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C50 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C60 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C70 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C80 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0C90 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0CA0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0CB0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0CC0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0CD0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0CE0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0CF0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D00 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D10 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D20 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D30 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D40 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D50 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D60 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D70 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D80 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0D90 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0DA0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0DB0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0DC0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0DD0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0DE0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0DF0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E00 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E10 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E20 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E30 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E40 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E50 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E60 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E70 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E80 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0E90 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0EA0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0EB0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0EC0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0ED0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0EE0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0EF0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F00 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F10 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F20 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F30 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F40 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F50 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F60 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F70 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F80 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0F90 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0FA0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0FB0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0FC0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0FD0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0FE0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + /* E0FF0 */ WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, WJ, + ]; const USE_OFFSET_0X0028: usize = 0; @@ -922,43 +1190,46 @@ const USE_OFFSET_0X1B00: usize = 2664; const USE_OFFSET_0X1CD0: usize = 3000; const USE_OFFSET_0X1DF8: usize = 3048; const USE_OFFSET_0X2008: usize = 3056; -const USE_OFFSET_0X2070: usize = 3072; -const USE_OFFSET_0X20F0: usize = 3096; -const USE_OFFSET_0X25C8: usize = 3104; -const USE_OFFSET_0X2D30: usize = 3112; -const USE_OFFSET_0XA800: usize = 3192; -const USE_OFFSET_0XABC0: usize = 3952; -const USE_OFFSET_0XFE00: usize = 4016; -const USE_OFFSET_0X10570: usize = 4032; -const USE_OFFSET_0X10A00: usize = 4112; -const USE_OFFSET_0X10AC0: usize = 4192; -const USE_OFFSET_0X10B80: usize = 4240; -const USE_OFFSET_0X10D00: usize = 4288; -const USE_OFFSET_0X10E80: usize = 4352; -const USE_OFFSET_0X10F30: usize = 4408; -const USE_OFFSET_0X11100: usize = 4816; -const USE_OFFSET_0X11280: usize = 5136; -const USE_OFFSET_0X11400: usize = 5384; -const USE_OFFSET_0X11580: usize = 5608; -const USE_OFFSET_0X11800: usize = 6064; -const USE_OFFSET_0X11900: usize = 6128; -const USE_OFFSET_0X119A0: usize = 6224; -const USE_OFFSET_0X11C00: usize = 6480; -const USE_OFFSET_0X11D00: usize = 6664; -const USE_OFFSET_0X11EE0: usize = 6840; -const USE_OFFSET_0X13000: usize = 6864; -const USE_OFFSET_0X16AC0: usize = 7952; -const USE_OFFSET_0X16F00: usize = 8072; -const USE_OFFSET_0X16FE0: usize = 8224; -const USE_OFFSET_0X18B00: usize = 8232; -const USE_OFFSET_0X1BC00: usize = 8704; -const USE_OFFSET_0X1E100: usize = 8864; -const USE_OFFSET_0X1E290: usize = 8944; -const USE_OFFSET_0X1E900: usize = 9056; -const USE_OFFSET_0XE0100: usize = 9152; +const USE_OFFSET_0X20F0: usize = 3184; +const USE_OFFSET_0X25C8: usize = 3192; +const USE_OFFSET_0X2D30: usize = 3200; +const USE_OFFSET_0XA800: usize = 3280; +const USE_OFFSET_0XABC0: usize = 4040; +const USE_OFFSET_0XFE00: usize = 4104; +const USE_OFFSET_0XFEF8: usize = 4120; +const USE_OFFSET_0XFFF0: usize = 4128; +const USE_OFFSET_0X10570: usize = 4144; +const USE_OFFSET_0X10A00: usize = 4224; +const USE_OFFSET_0X10AC0: usize = 4304; +const USE_OFFSET_0X10B80: usize = 4352; +const USE_OFFSET_0X10D00: usize = 4400; +const USE_OFFSET_0X10E80: usize = 4464; +const USE_OFFSET_0X10F30: usize = 4520; +const USE_OFFSET_0X11100: usize = 4928; +const USE_OFFSET_0X11280: usize = 5248; +const USE_OFFSET_0X11400: usize = 5496; +const USE_OFFSET_0X11580: usize = 5720; +const USE_OFFSET_0X11800: usize = 6176; +const USE_OFFSET_0X11900: usize = 6240; +const USE_OFFSET_0X119A0: usize = 6336; +const USE_OFFSET_0X11C00: usize = 6592; +const USE_OFFSET_0X11D00: usize = 6776; +const USE_OFFSET_0X11EE0: usize = 6952; +const USE_OFFSET_0X13000: usize = 6976; +const USE_OFFSET_0X16AC0: usize = 8064; +const USE_OFFSET_0X16F00: usize = 8184; +const USE_OFFSET_0X16FE0: usize = 8336; +const USE_OFFSET_0X18B00: usize = 8344; +const USE_OFFSET_0X1BC00: usize = 8816; +const USE_OFFSET_0X1D170: usize = 8976; +const USE_OFFSET_0X1E100: usize = 8992; +const USE_OFFSET_0X1E290: usize = 9072; +const USE_OFFSET_0X1E900: usize = 9184; +const USE_OFFSET_0XE0000: usize = 9280; #[rustfmt::skip] -pub fn get_category(u: u32) -> Category { +pub fn get_category(info: &GlyphInfo) -> Category { + let u = info.glyph_id; match u >> 12 { 0x0 => { if (0x0028..=0x003F).contains(&u) { return USE_TABLE[u as usize - 0x0028 + USE_OFFSET_0X0028]; } @@ -979,8 +1250,7 @@ pub fn get_category(u: u32) -> Category { if (0x1DF8..=0x1DFF).contains(&u) { return USE_TABLE[u as usize - 0x1DF8 + USE_OFFSET_0X1DF8]; } } 0x2 => { - if (0x2008..=0x2017).contains(&u) { return USE_TABLE[u as usize - 0x2008 + USE_OFFSET_0X2008]; } - if (0x2070..=0x2087).contains(&u) { return USE_TABLE[u as usize - 0x2070 + USE_OFFSET_0X2070]; } + if (0x2008..=0x2087).contains(&u) { return USE_TABLE[u as usize - 0x2008 + USE_OFFSET_0X2008]; } if (0x20F0..=0x20F7).contains(&u) { return USE_TABLE[u as usize - 0x20F0 + USE_OFFSET_0X20F0]; } if (0x25C8..=0x25CF).contains(&u) { return USE_TABLE[u as usize - 0x25C8 + USE_OFFSET_0X25C8]; } if (0x2D30..=0x2D7F).contains(&u) { return USE_TABLE[u as usize - 0x2D30 + USE_OFFSET_0X2D30]; } @@ -991,8 +1261,11 @@ pub fn get_category(u: u32) -> Category { } 0xF => { if (0xFE00..=0xFE0F).contains(&u) { return USE_TABLE[u as usize - 0xFE00 + USE_OFFSET_0XFE00]; } + if (0xFEF8..=0xFEFF).contains(&u) { return USE_TABLE[u as usize - 0xFEF8 + USE_OFFSET_0XFEF8]; } + if (0xFFF0..=0xFFFF).contains(&u) { return USE_TABLE[u as usize - 0xFFF0 + USE_OFFSET_0XFFF0]; } } 0x10 => { + if (0xFFF0..=0xFFFF).contains(&u) { return USE_TABLE[u as usize - 0xFFF0 + USE_OFFSET_0XFFF0]; } if (0x10570..=0x105BF).contains(&u) { return USE_TABLE[u as usize - 0x10570 + USE_OFFSET_0X10570]; } if (0x10A00..=0x10A4F).contains(&u) { return USE_TABLE[u as usize - 0x10A00 + USE_OFFSET_0X10A00]; } if (0x10AC0..=0x10AEF).contains(&u) { return USE_TABLE[u as usize - 0x10AC0 + USE_OFFSET_0X10AC0]; } @@ -1028,16 +1301,26 @@ pub fn get_category(u: u32) -> Category { 0x1B => { if (0x1BC00..=0x1BC9F).contains(&u) { return USE_TABLE[u as usize - 0x1BC00 + USE_OFFSET_0X1BC00]; } } + 0x1D => { + if (0x1D170..=0x1D17F).contains(&u) { return USE_TABLE[u as usize - 0x1D170 + USE_OFFSET_0X1D170]; } + } 0x1E => { if (0x1E100..=0x1E14F).contains(&u) { return USE_TABLE[u as usize - 0x1E100 + USE_OFFSET_0X1E100]; } if (0x1E290..=0x1E2FF).contains(&u) { return USE_TABLE[u as usize - 0x1E290 + USE_OFFSET_0X1E290]; } if (0x1E900..=0x1E95F).contains(&u) { return USE_TABLE[u as usize - 0x1E900 + USE_OFFSET_0X1E900]; } } 0xE0 => { - if (0xE0100..=0xE01EF).contains(&u) { return USE_TABLE[u as usize - 0xE0100 + USE_OFFSET_0XE0100]; } + if (0xE0000..=0xE0FFF).contains(&u) { return USE_TABLE[u as usize - 0xE0000 + USE_OFFSET_0XE0000]; } + } + 0xE1 => { + if (0xE0000..=0xE0FFF).contains(&u) { return USE_TABLE[u as usize - 0xE0000 + USE_OFFSET_0XE0000]; } } _ => {} } + if info.general_category() == GeneralCategory::Unassigned { + return WJ; + } + O } diff --git a/tests/shaping/aots.rs b/tests/shaping/aots.rs index 4585d366..9433a27e 100644 --- a/tests/shaping/aots.rs +++ b/tests/shaping/aots.rs @@ -838,7 +838,7 @@ fn gpos4_simple_001() { shape( "tests/fonts/aots/gpos4_simple_1.otf", "\u{0011}\u{0012}\u{0013}\u{0011}", - "--features=\"test\" --single-par --no-clusters --no-glyph-names --ned", + "--features=\"test\" --no-clusters --no-glyph-names --ned", ), "17|\ 18@1500,0|\ @@ -898,7 +898,7 @@ fn gpos5_002() { shape( "tests/fonts/aots/gpos5_font1.otf", "\u{0011}\u{001E}\u{001F}\u{0013}\u{0011}", - "--features=\"test\" --single-par --no-clusters --no-glyph-names --ned", + "--features=\"test\" --no-clusters --no-glyph-names --ned", ), "17|\ 18@1500,0|\ diff --git a/tests/shaping/in_house.rs b/tests/shaping/in_house.rs index 843e84c1..c0fad19a 100644 --- a/tests/shaping/in_house.rs +++ b/tests/shaping/in_house.rs @@ -9998,7 +9998,7 @@ fn unsafe_to_concat_001() { shape( "tests/fonts/in-house/34da9aab7bee86c4dfc3b85e423435822fdf4b62.ttf", "\u{0628}\u{200C}\u{0628}", - "--show-flags", + "--show-flags --unsafe-to-concat", ), "uni0628=1+993#2|\ uni0628=0+993#2" diff --git a/tests/shaping/main.rs b/tests/shaping/main.rs index a86338b1..5602b046 100644 --- a/tests/shaping/main.rs +++ b/tests/shaping/main.rs @@ -16,6 +16,7 @@ struct Args { script: Option, #[allow(dead_code)] remove_default_ignorables: bool, + unsafe_to_concat: bool, cluster_level: rustybuzz::BufferClusterLevel, features: Vec, pre_context: Option, @@ -43,6 +44,7 @@ fn parse_args(args: Vec) -> Result { language: parser.opt_value_from_str("--language")?, script: parser.opt_value_from_str("--script")?, remove_default_ignorables: parser.contains("--remove-default-ignorables"), + unsafe_to_concat: parser.contains("--unsafe-to-concat"), cluster_level: parser .opt_value_from_fn("--cluster-level", parse_cluster)? .unwrap_or_default(), @@ -139,6 +141,7 @@ pub fn shape(font_path: &str, text: &str, options: &str) -> String { let mut buffer_flags = BufferFlags::default(); buffer_flags.set(BufferFlags::BEGINNING_OF_TEXT, args.bot); buffer_flags.set(BufferFlags::END_OF_TEXT, args.eot); + buffer_flags.set(BufferFlags::PRODUCE_UNSAFE_TO_CONCAT, args.unsafe_to_concat); buffer_flags.set( BufferFlags::REMOVE_DEFAULT_IGNORABLES, args.remove_default_ignorables, diff --git a/tests/shaping/text_rendering_tests.rs b/tests/shaping/text_rendering_tests.rs index 58a22115..9b71dcd2 100644 --- a/tests/shaping/text_rendering_tests.rs +++ b/tests/shaping/text_rendering_tests.rs @@ -11515,8 +11515,7 @@ fn shlana_2_005() { "--ned --remove-default-ignorables", ), "uni1AAD|\ - uni25CC@1212,0|\ - uni1A63@2424,0" + uni1A63@1212,0" ); }