[indic/khmer/myanmar] Add static_assert that categories match OT_*

This commit is contained in:
Behdad Esfahbod 2022-06-10 00:50:47 -06:00
parent 15ea4ccb04
commit d414fb3328
10 changed files with 137 additions and 48 deletions

View File

@ -413,7 +413,7 @@ static const int indic_syllable_machine_en_main = 39;
#line 111 "hb-ot-shaper-indic-machine.rl" #line 115 "hb-ot-shaper-indic-machine.rl"
#define found_syllable(syllable_type) \ #define found_syllable(syllable_type) \
@ -440,7 +440,7 @@ find_syllables_indic (hb_buffer_t *buffer)
act = 0; act = 0;
} }
#line 131 "hb-ot-shaper-indic-machine.rl" #line 135 "hb-ot-shaper-indic-machine.rl"
p = 0; p = 0;
@ -485,51 +485,51 @@ _eof_trans:
{te = p+1;} {te = p+1;}
break; break;
case 11: case 11:
#line 107 "hb-ot-shaper-indic-machine.rl" #line 111 "hb-ot-shaper-indic-machine.rl"
{te = p+1;{ found_syllable (indic_non_indic_cluster); }} {te = p+1;{ found_syllable (indic_non_indic_cluster); }}
break; break;
case 13: case 13:
#line 102 "hb-ot-shaper-indic-machine.rl" #line 106 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_consonant_syllable); }} {te = p;p--;{ found_syllable (indic_consonant_syllable); }}
break; break;
case 14: case 14:
#line 103 "hb-ot-shaper-indic-machine.rl" #line 107 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_vowel_syllable); }} {te = p;p--;{ found_syllable (indic_vowel_syllable); }}
break; break;
case 17: case 17:
#line 104 "hb-ot-shaper-indic-machine.rl" #line 108 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_standalone_cluster); }} {te = p;p--;{ found_syllable (indic_standalone_cluster); }}
break; break;
case 19: case 19:
#line 105 "hb-ot-shaper-indic-machine.rl" #line 109 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_symbol_cluster); }} {te = p;p--;{ found_syllable (indic_symbol_cluster); }}
break; break;
case 15: case 15:
#line 106 "hb-ot-shaper-indic-machine.rl" #line 110 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_broken_cluster); }} {te = p;p--;{ found_syllable (indic_broken_cluster); }}
break; break;
case 16: case 16:
#line 107 "hb-ot-shaper-indic-machine.rl" #line 111 "hb-ot-shaper-indic-machine.rl"
{te = p;p--;{ found_syllable (indic_non_indic_cluster); }} {te = p;p--;{ found_syllable (indic_non_indic_cluster); }}
break; break;
case 1: case 1:
#line 102 "hb-ot-shaper-indic-machine.rl" #line 106 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_consonant_syllable); }} {{p = ((te))-1;}{ found_syllable (indic_consonant_syllable); }}
break; break;
case 3: case 3:
#line 103 "hb-ot-shaper-indic-machine.rl" #line 107 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_vowel_syllable); }} {{p = ((te))-1;}{ found_syllable (indic_vowel_syllable); }}
break; break;
case 7: case 7:
#line 104 "hb-ot-shaper-indic-machine.rl" #line 108 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_standalone_cluster); }} {{p = ((te))-1;}{ found_syllable (indic_standalone_cluster); }}
break; break;
case 8: case 8:
#line 105 "hb-ot-shaper-indic-machine.rl" #line 109 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_symbol_cluster); }} {{p = ((te))-1;}{ found_syllable (indic_symbol_cluster); }}
break; break;
case 4: case 4:
#line 106 "hb-ot-shaper-indic-machine.rl" #line 110 "hb-ot-shaper-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (indic_broken_cluster); }} {{p = ((te))-1;}{ found_syllable (indic_broken_cluster); }}
break; break;
case 6: case 6:
@ -550,19 +550,19 @@ _eof_trans:
case 18: case 18:
#line 1 "NONE" #line 1 "NONE"
{te = p+1;} {te = p+1;}
#line 102 "hb-ot-shaper-indic-machine.rl" #line 106 "hb-ot-shaper-indic-machine.rl"
{act = 1;} {act = 1;}
break; break;
case 5: case 5:
#line 1 "NONE" #line 1 "NONE"
{te = p+1;} {te = p+1;}
#line 106 "hb-ot-shaper-indic-machine.rl" #line 110 "hb-ot-shaper-indic-machine.rl"
{act = 5;} {act = 5;}
break; break;
case 12: case 12:
#line 1 "NONE" #line 1 "NONE"
{te = p+1;} {te = p+1;}
#line 107 "hb-ot-shaper-indic-machine.rl" #line 111 "hb-ot-shaper-indic-machine.rl"
{act = 6;} {act = 6;}
break; break;
#line 569 "hb-ot-shaper-indic-machine.hh" #line 569 "hb-ot-shaper-indic-machine.hh"
@ -590,7 +590,7 @@ _again:
} }
#line 139 "hb-ot-shaper-indic-machine.rl" #line 143 "hb-ot-shaper-indic-machine.rl"
} }

View File

@ -55,7 +55,9 @@ enum indic_syllable_type_t {
%%{ %%{
# These values are replicated from indic.hh; keep in sync.
# These values are replicated from indic.hh, and relisted in indic.cc; keep in sync.
export C = 1; export C = 1;
export V = 2; export V = 2;
export N = 3; export N = 3;
@ -75,6 +77,7 @@ export CM = 16;
export Symbol= 17; export Symbol= 17;
export CS = 18; export CS = 18;
c = (C | Ra); # is_consonant c = (C | Ra); # is_consonant
n = ((ZWNJ?.RS)? (N.N?)?); # is_consonant_modifier n = ((ZWNJ?.RS)? (N.N?)?); # is_consonant_modifier
z = ZWJ|ZWNJ; # is_joiner z = ZWJ|ZWNJ; # is_joiner

View File

@ -39,6 +39,29 @@
*/ */
#define I_Check(C) static_assert (OT_##C == I_Cat(C), "")
I_Check (C);
I_Check (V);
I_Check (N);
I_Check (H);
I_Check (ZWNJ);
I_Check (ZWJ);
I_Check (M);
I_Check (SM);
I_Check (A);
I_Check (VD);
I_Check (PLACEHOLDER);
I_Check (DOTTEDCIRCLE);
I_Check (RS);
I_Check (Repha);
I_Check (Ra);
I_Check (CM);
I_Check (Symbol);
I_Check (CS);
#undef I_Check
static inline void static inline void
set_indic_properties (hb_glyph_info_t &info) set_indic_properties (hb_glyph_info_t &info)
{ {
@ -133,11 +156,6 @@ static const indic_config_t indic_configs[] =
}; };
/*
* Indic shaper.
*/
static const hb_ot_map_feature_t static const hb_ot_map_feature_t
indic_features[] = indic_features[] =
{ {

View File

@ -76,9 +76,12 @@ enum ot_category_t {
OT_Ygroup = 27, OT_Ygroup = 27,
/* Myanmar */ /* Myanmar */
OT_IV = OT_V,
OT_As = 32, // Asat OT_As = 32, // Asat
OT_D = 33, // Digits except zero OT_D = 33, // Digits except zero
OT_D0 = 34, // Digit zero OT_D0 = 34, // Digit zero
OT_DB = OT_N, // Dot below
OT_GB = OT_PLACEHOLDER,
OT_MH = 35, // Medial OT_MH = 35, // Medial
OT_MR = 36, // Medial OT_MR = 36, // Medial
OT_MW = 37, // Medial OT_MW = 37, // Medial

View File

@ -257,7 +257,7 @@ static const int khmer_syllable_machine_en_main = 20;
#line 98 "hb-ot-shaper-khmer-machine.rl" #line 102 "hb-ot-shaper-khmer-machine.rl"
#define found_syllable(syllable_type) \ #define found_syllable(syllable_type) \
@ -284,7 +284,7 @@ find_syllables_khmer (hb_buffer_t *buffer)
act = 0; act = 0;
} }
#line 118 "hb-ot-shaper-khmer-machine.rl" #line 122 "hb-ot-shaper-khmer-machine.rl"
p = 0; p = 0;
@ -329,27 +329,27 @@ _eof_trans:
{te = p+1;} {te = p+1;}
break; break;
case 8: case 8:
#line 94 "hb-ot-shaper-khmer-machine.rl" #line 98 "hb-ot-shaper-khmer-machine.rl"
{te = p+1;{ found_syllable (khmer_non_khmer_cluster); }} {te = p+1;{ found_syllable (khmer_non_khmer_cluster); }}
break; break;
case 10: case 10:
#line 92 "hb-ot-shaper-khmer-machine.rl" #line 96 "hb-ot-shaper-khmer-machine.rl"
{te = p;p--;{ found_syllable (khmer_consonant_syllable); }} {te = p;p--;{ found_syllable (khmer_consonant_syllable); }}
break; break;
case 12: case 12:
#line 93 "hb-ot-shaper-khmer-machine.rl" #line 97 "hb-ot-shaper-khmer-machine.rl"
{te = p;p--;{ found_syllable (khmer_broken_cluster); }} {te = p;p--;{ found_syllable (khmer_broken_cluster); }}
break; break;
case 11: case 11:
#line 94 "hb-ot-shaper-khmer-machine.rl" #line 98 "hb-ot-shaper-khmer-machine.rl"
{te = p;p--;{ found_syllable (khmer_non_khmer_cluster); }} {te = p;p--;{ found_syllable (khmer_non_khmer_cluster); }}
break; break;
case 1: case 1:
#line 92 "hb-ot-shaper-khmer-machine.rl" #line 96 "hb-ot-shaper-khmer-machine.rl"
{{p = ((te))-1;}{ found_syllable (khmer_consonant_syllable); }} {{p = ((te))-1;}{ found_syllable (khmer_consonant_syllable); }}
break; break;
case 5: case 5:
#line 93 "hb-ot-shaper-khmer-machine.rl" #line 97 "hb-ot-shaper-khmer-machine.rl"
{{p = ((te))-1;}{ found_syllable (khmer_broken_cluster); }} {{p = ((te))-1;}{ found_syllable (khmer_broken_cluster); }}
break; break;
case 3: case 3:
@ -367,13 +367,13 @@ _eof_trans:
case 4: case 4:
#line 1 "NONE" #line 1 "NONE"
{te = p+1;} {te = p+1;}
#line 93 "hb-ot-shaper-khmer-machine.rl" #line 97 "hb-ot-shaper-khmer-machine.rl"
{act = 2;} {act = 2;}
break; break;
case 9: case 9:
#line 1 "NONE" #line 1 "NONE"
{te = p+1;} {te = p+1;}
#line 94 "hb-ot-shaper-khmer-machine.rl" #line 98 "hb-ot-shaper-khmer-machine.rl"
{act = 3;} {act = 3;}
break; break;
#line 380 "hb-ot-shaper-khmer-machine.hh" #line 380 "hb-ot-shaper-khmer-machine.hh"
@ -401,7 +401,7 @@ _again:
} }
#line 126 "hb-ot-shaper-khmer-machine.rl" #line 130 "hb-ot-shaper-khmer-machine.rl"
} }

View File

@ -54,7 +54,9 @@ enum khmer_syllable_type_t {
%%{ %%{
# These values are replicated from indic.hh; keep in sync.
# These values are replicated from indic.hh, and relisted in khmer.cc; keep in sync.
export C = 1; export C = 1;
export V = 2; export V = 2;
export ZWNJ = 5; export ZWNJ = 5;
@ -73,6 +75,7 @@ export Robatic = 25;
export Xgroup = 26; export Xgroup = 26;
export Ygroup = 27; export Ygroup = 27;
c = (C | Ra | V); c = (C | Ra | V);
cn = c.((ZWJ|ZWNJ)?.Robatic)?; cn = c.((ZWJ|ZWNJ)?.Robatic)?;
joiner = (ZWJ | ZWNJ); joiner = (ZWJ | ZWNJ);

View File

@ -37,6 +37,30 @@
* Khmer shaper. * Khmer shaper.
*/ */
#define K_Check(C) static_assert (OT_##C == K_Cat(C), "")
K_Check (C);
K_Check (V);
K_Check (ZWNJ);
K_Check (ZWJ);
K_Check (PLACEHOLDER);
K_Check (DOTTEDCIRCLE);
K_Check (Ra);
K_Check (VAbv);
K_Check (VBlw);
K_Check (VPre);
K_Check (VPst);
K_Check (Coeng);
K_Check (Robatic);
K_Check (Xgroup);
K_Check (Ygroup);
#undef K_Check
static const hb_ot_map_feature_t static const hb_ot_map_feature_t
khmer_features[] = khmer_features[] =
{ {

View File

@ -435,7 +435,7 @@ static const int myanmar_syllable_machine_en_main = 0;
#line 118 "hb-ot-shaper-myanmar-machine.rl" #line 121 "hb-ot-shaper-myanmar-machine.rl"
#define found_syllable(syllable_type) \ #define found_syllable(syllable_type) \
@ -462,7 +462,7 @@ find_syllables_myanmar (hb_buffer_t *buffer)
act = 0; act = 0;
} }
#line 138 "hb-ot-shaper-myanmar-machine.rl" #line 141 "hb-ot-shaper-myanmar-machine.rl"
p = 0; p = 0;
@ -503,35 +503,35 @@ _eof_trans:
switch ( _myanmar_syllable_machine_trans_actions[_trans] ) { switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
case 6: case 6:
#line 110 "hb-ot-shaper-myanmar-machine.rl" #line 113 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_consonant_syllable); }} {te = p+1;{ found_syllable (myanmar_consonant_syllable); }}
break; break;
case 4: case 4:
#line 111 "hb-ot-shaper-myanmar-machine.rl" #line 114 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }} {te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
break; break;
case 10: case 10:
#line 112 "hb-ot-shaper-myanmar-machine.rl" #line 115 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_punctuation_cluster); }} {te = p+1;{ found_syllable (myanmar_punctuation_cluster); }}
break; break;
case 8: case 8:
#line 113 "hb-ot-shaper-myanmar-machine.rl" #line 116 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_broken_cluster); }} {te = p+1;{ found_syllable (myanmar_broken_cluster); }}
break; break;
case 3: case 3:
#line 114 "hb-ot-shaper-myanmar-machine.rl" #line 117 "hb-ot-shaper-myanmar-machine.rl"
{te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }} {te = p+1;{ found_syllable (myanmar_non_myanmar_cluster); }}
break; break;
case 5: case 5:
#line 110 "hb-ot-shaper-myanmar-machine.rl" #line 113 "hb-ot-shaper-myanmar-machine.rl"
{te = p;p--;{ found_syllable (myanmar_consonant_syllable); }} {te = p;p--;{ found_syllable (myanmar_consonant_syllable); }}
break; break;
case 7: case 7:
#line 113 "hb-ot-shaper-myanmar-machine.rl" #line 116 "hb-ot-shaper-myanmar-machine.rl"
{te = p;p--;{ found_syllable (myanmar_broken_cluster); }} {te = p;p--;{ found_syllable (myanmar_broken_cluster); }}
break; break;
case 9: case 9:
#line 114 "hb-ot-shaper-myanmar-machine.rl" #line 117 "hb-ot-shaper-myanmar-machine.rl"
{te = p;p--;{ found_syllable (myanmar_non_myanmar_cluster); }} {te = p;p--;{ found_syllable (myanmar_non_myanmar_cluster); }}
break; break;
#line 538 "hb-ot-shaper-myanmar-machine.hh" #line 538 "hb-ot-shaper-myanmar-machine.hh"
@ -559,7 +559,7 @@ _again:
} }
#line 146 "hb-ot-shaper-myanmar-machine.rl" #line 149 "hb-ot-shaper-myanmar-machine.rl"
} }

View File

@ -57,7 +57,9 @@ enum myanmar_syllable_type_t {
%%{ %%{
# These values are replicated from indic.hh; keep in sync.
# These values are replicated from indic.hh, and relisted in myanmar.cc; keep in sync.
export C = 1; export C = 1;
export IV = 2; export IV = 2;
export DB = 3; # Dot below = OT_N export DB = 3; # Dot below = OT_N

View File

@ -37,6 +37,42 @@
* Myanmar shaper. * Myanmar shaper.
*/ */
#define M_Check(C) static_assert (OT_##C == M_Cat(C), "")
M_Check (C);
M_Check (IV);
M_Check (DB);
M_Check (H);
M_Check (ZWNJ);
M_Check (ZWJ);
M_Check (SM);
M_Check (GB);
M_Check (DOTTEDCIRCLE);
M_Check (A);
M_Check (Ra);
M_Check (CS);
M_Check (VAbv);
M_Check (VBlw);
M_Check (VPre);
M_Check (VPst);
M_Check (As);
M_Check (D);
M_Check (D0);
M_Check (MH);
M_Check (MR);
M_Check (MW);
M_Check (MY);
M_Check (PT);
M_Check (VS);
M_Check (P);
M_Check (ML);
#undef M_Check
static const hb_tag_t static const hb_tag_t
myanmar_basic_features[] = myanmar_basic_features[] =
{ {