[use] Reuse category numbers exported from ragel machine
Part of https://github.com/harfbuzz/harfbuzz/pull/2726
This commit is contained in:
parent
c417e0d2f9
commit
3bb2653a5e
|
@ -462,6 +462,7 @@ print ()
|
||||||
print ('#ifndef HB_NO_OT_SHAPE')
|
print ('#ifndef HB_NO_OT_SHAPE')
|
||||||
print ()
|
print ()
|
||||||
print ('#include "hb-ot-shape-complex-use.hh"')
|
print ('#include "hb-ot-shape-complex-use.hh"')
|
||||||
|
print ('#include "hb-ot-shape-complex-use-machine.hh"')
|
||||||
print ()
|
print ()
|
||||||
|
|
||||||
total = 0
|
total = 0
|
||||||
|
@ -503,12 +504,12 @@ print ('#pragma GCC diagnostic push')
|
||||||
print ('#pragma GCC diagnostic ignored "-Wunused-macros"')
|
print ('#pragma GCC diagnostic ignored "-Wunused-macros"')
|
||||||
for k,v in sorted(use_mapping.items()):
|
for k,v in sorted(use_mapping.items()):
|
||||||
if k in use_positions and use_positions[k]: continue
|
if k in use_positions and use_positions[k]: continue
|
||||||
print ("#define %s USE_%s /* %s */" % (k, k, v.__name__[3:]))
|
print ("#define %s USE(%s) /* %s */" % (k, k, v.__name__[3:]))
|
||||||
for k,v in sorted(use_positions.items()):
|
for k,v in sorted(use_positions.items()):
|
||||||
if not v: continue
|
if not v: continue
|
||||||
for suf in v.keys():
|
for suf in v.keys():
|
||||||
tag = k + suf
|
tag = k + suf
|
||||||
print ("#define %s USE_%s" % (tag, tag))
|
print ("#define %s USE(%s)" % (tag, tag))
|
||||||
print ('#pragma GCC diagnostic pop')
|
print ('#pragma GCC diagnostic pop')
|
||||||
print ("")
|
print ("")
|
||||||
print ("static const USE_TABLE_ELEMENT_TYPE use_table[] = {")
|
print ("static const USE_TABLE_ELEMENT_TYPE use_table[] = {")
|
||||||
|
@ -564,7 +565,7 @@ for p in sorted(pages):
|
||||||
print (" default:")
|
print (" default:")
|
||||||
print (" break;")
|
print (" break;")
|
||||||
print (" }")
|
print (" }")
|
||||||
print (" return USE_O;")
|
print (" return USE(O);")
|
||||||
print ("}")
|
print ("}")
|
||||||
print ()
|
print ()
|
||||||
for k in sorted(use_mapping.keys()):
|
for k in sorted(use_mapping.keys()):
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
|
#define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
|
||||||
|
|
||||||
#include "hb.hh"
|
#include "hb.hh"
|
||||||
|
#include "hb-ot-shape-complex-use.hh"
|
||||||
|
|
||||||
/* buffer var allocations */
|
/* buffer var allocations */
|
||||||
#define use_category() complex_var_u8_category()
|
#define use_category() complex_var_u8_category()
|
||||||
|
@ -50,7 +51,7 @@ enum use_syllable_type_t {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#line 54 "hb-ot-shape-complex-use-machine.hh"
|
#line 55 "hb-ot-shape-complex-use-machine.hh"
|
||||||
#define use_syllable_machine_ex_B 1u
|
#define use_syllable_machine_ex_B 1u
|
||||||
#define use_syllable_machine_ex_CMAbv 31u
|
#define use_syllable_machine_ex_CMAbv 31u
|
||||||
#define use_syllable_machine_ex_CMBlw 32u
|
#define use_syllable_machine_ex_CMBlw 32u
|
||||||
|
@ -92,7 +93,7 @@ enum use_syllable_type_t {
|
||||||
#define use_syllable_machine_ex_ZWNJ 14u
|
#define use_syllable_machine_ex_ZWNJ 14u
|
||||||
|
|
||||||
|
|
||||||
#line 96 "hb-ot-shape-complex-use-machine.hh"
|
#line 97 "hb-ot-shape-complex-use-machine.hh"
|
||||||
static const unsigned char _use_syllable_machine_trans_keys[] = {
|
static const unsigned char _use_syllable_machine_trans_keys[] = {
|
||||||
1u, 1u, 1u, 1u, 0u, 51u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u,
|
1u, 1u, 1u, 1u, 0u, 51u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u,
|
||||||
24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u,
|
24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u,
|
||||||
|
@ -361,11 +362,11 @@ static const int use_syllable_machine_error = -1;
|
||||||
static const int use_syllable_machine_en_main = 2;
|
static const int use_syllable_machine_en_main = 2;
|
||||||
|
|
||||||
|
|
||||||
#line 55 "hb-ot-shape-complex-use-machine.rl"
|
#line 56 "hb-ot-shape-complex-use-machine.rl"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#line 168 "hb-ot-shape-complex-use-machine.rl"
|
#line 173 "hb-ot-shape-complex-use-machine.rl"
|
||||||
|
|
||||||
|
|
||||||
#define found_syllable(syllable_type) \
|
#define found_syllable(syllable_type) \
|
||||||
|
@ -379,9 +380,9 @@ static const int use_syllable_machine_en_main = 2;
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
not_standard_default_ignorable (const hb_glyph_info_t &i)
|
not_standard_default_ignorable (const hb_glyph_info_t &i)
|
||||||
{ return !(i.use_category() == USE_O && _hb_glyph_info_is_default_ignorable (&i)); }
|
{ return !(i.use_category() == USE(O) && _hb_glyph_info_is_default_ignorable (&i)); }
|
||||||
|
|
||||||
static void
|
static inline void
|
||||||
find_syllables_use (hb_buffer_t *buffer)
|
find_syllables_use (hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
hb_glyph_info_t *info = buffer->info;
|
hb_glyph_info_t *info = buffer->info;
|
||||||
|
@ -392,7 +393,7 @@ find_syllables_use (hb_buffer_t *buffer)
|
||||||
hb_second)
|
hb_second)
|
||||||
| hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
|
| hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
|
||||||
{
|
{
|
||||||
if (p.second.use_category() == USE_ZWNJ)
|
if (p.second.use_category() == USE(ZWNJ))
|
||||||
for (unsigned i = p.first + 1; i < buffer->len; ++i)
|
for (unsigned i = p.first + 1; i < buffer->len; ++i)
|
||||||
if (not_standard_default_ignorable (info[i]))
|
if (not_standard_default_ignorable (info[i]))
|
||||||
return !_hb_glyph_info_is_unicode_mark (&info[i]);
|
return !_hb_glyph_info_is_unicode_mark (&info[i]);
|
||||||
|
@ -408,7 +409,7 @@ find_syllables_use (hb_buffer_t *buffer)
|
||||||
unsigned int act HB_UNUSED;
|
unsigned int act HB_UNUSED;
|
||||||
int cs;
|
int cs;
|
||||||
|
|
||||||
#line 412 "hb-ot-shape-complex-use-machine.hh"
|
#line 413 "hb-ot-shape-complex-use-machine.hh"
|
||||||
{
|
{
|
||||||
cs = use_syllable_machine_start;
|
cs = use_syllable_machine_start;
|
||||||
ts = 0;
|
ts = 0;
|
||||||
|
@ -416,12 +417,12 @@ find_syllables_use (hb_buffer_t *buffer)
|
||||||
act = 0;
|
act = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 212 "hb-ot-shape-complex-use-machine.rl"
|
#line 217 "hb-ot-shape-complex-use-machine.rl"
|
||||||
|
|
||||||
|
|
||||||
unsigned int syllable_serial = 1;
|
unsigned int syllable_serial = 1;
|
||||||
|
|
||||||
#line 425 "hb-ot-shape-complex-use-machine.hh"
|
#line 426 "hb-ot-shape-complex-use-machine.hh"
|
||||||
{
|
{
|
||||||
int _slen;
|
int _slen;
|
||||||
int _trans;
|
int _trans;
|
||||||
|
@ -435,7 +436,7 @@ _resume:
|
||||||
#line 1 "NONE"
|
#line 1 "NONE"
|
||||||
{ts = p;}
|
{ts = p;}
|
||||||
break;
|
break;
|
||||||
#line 439 "hb-ot-shape-complex-use-machine.hh"
|
#line 440 "hb-ot-shape-complex-use-machine.hh"
|
||||||
}
|
}
|
||||||
|
|
||||||
_keys = _use_syllable_machine_trans_keys + (cs<<1);
|
_keys = _use_syllable_machine_trans_keys + (cs<<1);
|
||||||
|
@ -458,62 +459,62 @@ _eof_trans:
|
||||||
{te = p+1;}
|
{te = p+1;}
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
#line 155 "hb-ot-shape-complex-use-machine.rl"
|
#line 160 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p+1;{ found_syllable (independent_cluster); }}
|
{te = p+1;{ found_syllable (independent_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
#line 158 "hb-ot-shape-complex-use-machine.rl"
|
#line 163 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p+1;{ found_syllable (standard_cluster); }}
|
{te = p+1;{ found_syllable (standard_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
#line 163 "hb-ot-shape-complex-use-machine.rl"
|
#line 168 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p+1;{ found_syllable (broken_cluster); }}
|
{te = p+1;{ found_syllable (broken_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
#line 164 "hb-ot-shape-complex-use-machine.rl"
|
#line 169 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p+1;{ found_syllable (non_cluster); }}
|
{te = p+1;{ found_syllable (non_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
#line 156 "hb-ot-shape-complex-use-machine.rl"
|
#line 161 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
|
{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
#line 157 "hb-ot-shape-complex-use-machine.rl"
|
#line 162 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (sakot_terminated_cluster); }}
|
{te = p;p--;{ found_syllable (sakot_terminated_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
#line 158 "hb-ot-shape-complex-use-machine.rl"
|
#line 163 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (standard_cluster); }}
|
{te = p;p--;{ found_syllable (standard_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
#line 159 "hb-ot-shape-complex-use-machine.rl"
|
#line 164 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
|
{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
#line 160 "hb-ot-shape-complex-use-machine.rl"
|
#line 165 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (numeral_cluster); }}
|
{te = p;p--;{ found_syllable (numeral_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
#line 161 "hb-ot-shape-complex-use-machine.rl"
|
#line 166 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (symbol_cluster); }}
|
{te = p;p--;{ found_syllable (symbol_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 17:
|
case 17:
|
||||||
#line 162 "hb-ot-shape-complex-use-machine.rl"
|
#line 167 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (hieroglyph_cluster); }}
|
{te = p;p--;{ found_syllable (hieroglyph_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 15:
|
case 15:
|
||||||
#line 163 "hb-ot-shape-complex-use-machine.rl"
|
#line 168 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (broken_cluster); }}
|
{te = p;p--;{ found_syllable (broken_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
#line 164 "hb-ot-shape-complex-use-machine.rl"
|
#line 169 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{te = p;p--;{ found_syllable (non_cluster); }}
|
{te = p;p--;{ found_syllable (non_cluster); }}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
#line 163 "hb-ot-shape-complex-use-machine.rl"
|
#line 168 "hb-ot-shape-complex-use-machine.rl"
|
||||||
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
|
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
|
||||||
break;
|
break;
|
||||||
#line 517 "hb-ot-shape-complex-use-machine.hh"
|
#line 518 "hb-ot-shape-complex-use-machine.hh"
|
||||||
}
|
}
|
||||||
|
|
||||||
_again:
|
_again:
|
||||||
|
@ -522,7 +523,7 @@ _again:
|
||||||
#line 1 "NONE"
|
#line 1 "NONE"
|
||||||
{ts = 0;}
|
{ts = 0;}
|
||||||
break;
|
break;
|
||||||
#line 526 "hb-ot-shape-complex-use-machine.hh"
|
#line 527 "hb-ot-shape-complex-use-machine.hh"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ++p != pe )
|
if ( ++p != pe )
|
||||||
|
@ -538,7 +539,7 @@ _again:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 217 "hb-ot-shape-complex-use-machine.rl"
|
#line 222 "hb-ot-shape-complex-use-machine.rl"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
|
#define HB_OT_SHAPE_COMPLEX_USE_MACHINE_HH
|
||||||
|
|
||||||
#include "hb.hh"
|
#include "hb.hh"
|
||||||
|
#include "hb-ot-shape-complex-use.hh"
|
||||||
|
|
||||||
/* buffer var allocations */
|
/* buffer var allocations */
|
||||||
#define use_category() complex_var_u8_category()
|
#define use_category() complex_var_u8_category()
|
||||||
|
@ -56,6 +57,9 @@ enum use_syllable_type_t {
|
||||||
|
|
||||||
%%{
|
%%{
|
||||||
|
|
||||||
|
# Cateories used in the Universal Shaping Engine spec:
|
||||||
|
# https://docs.microsoft.com/en-us/typography/script-development/use
|
||||||
|
|
||||||
export O = 0; # OTHER
|
export O = 0; # OTHER
|
||||||
|
|
||||||
export B = 1; # BASE
|
export B = 1; # BASE
|
||||||
|
@ -99,6 +103,7 @@ export FMAbv = 45; # CONS_FINAL_MOD UIPC = Top
|
||||||
export FMBlw = 46; # CONS_FINAL_MOD UIPC = Bottom
|
export FMBlw = 46; # CONS_FINAL_MOD UIPC = Bottom
|
||||||
export FMPst = 47; # CONS_FINAL_MOD UIPC = Not_Applicable
|
export FMPst = 47; # CONS_FINAL_MOD UIPC = Not_Applicable
|
||||||
|
|
||||||
|
|
||||||
h = H | HVM | Sk;
|
h = H | HVM | Sk;
|
||||||
|
|
||||||
consonant_modifiers = CMAbv* CMBlw* ((h B | SUB) CMAbv? CMBlw*)*;
|
consonant_modifiers = CMAbv* CMBlw* ((h B | SUB) CMAbv? CMBlw*)*;
|
||||||
|
@ -178,9 +183,9 @@ main := |*
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
not_standard_default_ignorable (const hb_glyph_info_t &i)
|
not_standard_default_ignorable (const hb_glyph_info_t &i)
|
||||||
{ return !(i.use_category() == USE_O && _hb_glyph_info_is_default_ignorable (&i)); }
|
{ return !(i.use_category() == USE(O) && _hb_glyph_info_is_default_ignorable (&i)); }
|
||||||
|
|
||||||
static void
|
static inline void
|
||||||
find_syllables_use (hb_buffer_t *buffer)
|
find_syllables_use (hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
hb_glyph_info_t *info = buffer->info;
|
hb_glyph_info_t *info = buffer->info;
|
||||||
|
@ -191,7 +196,7 @@ find_syllables_use (hb_buffer_t *buffer)
|
||||||
hb_second)
|
hb_second)
|
||||||
| hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
|
| hb_filter ([&] (const hb_pair_t<unsigned, const hb_glyph_info_t &> p)
|
||||||
{
|
{
|
||||||
if (p.second.use_category() == USE_ZWNJ)
|
if (p.second.use_category() == USE(ZWNJ))
|
||||||
for (unsigned i = p.first + 1; i < buffer->len; ++i)
|
for (unsigned i = p.first + 1; i < buffer->len; ++i)
|
||||||
if (not_standard_default_ignorable (info[i]))
|
if (not_standard_default_ignorable (info[i]))
|
||||||
return !_hb_glyph_info_is_unicode_mark (&info[i]);
|
return !_hb_glyph_info_is_unicode_mark (&info[i]);
|
||||||
|
|
|
@ -36,48 +36,49 @@
|
||||||
#ifndef HB_NO_OT_SHAPE
|
#ifndef HB_NO_OT_SHAPE
|
||||||
|
|
||||||
#include "hb-ot-shape-complex-use.hh"
|
#include "hb-ot-shape-complex-use.hh"
|
||||||
|
#include "hb-ot-shape-complex-use-machine.hh"
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-macros"
|
#pragma GCC diagnostic ignored "-Wunused-macros"
|
||||||
#define B USE_B /* BASE */
|
#define B USE(B) /* BASE */
|
||||||
#define CS USE_CS /* CONS_WITH_STACKER */
|
#define CS USE(CS) /* CONS_WITH_STACKER */
|
||||||
#define G USE_G /* HIEROGLYPH */
|
#define G USE(G) /* HIEROGLYPH */
|
||||||
#define GB USE_GB /* BASE_OTHER */
|
#define GB USE(GB) /* BASE_OTHER */
|
||||||
#define H USE_H /* HALANT */
|
#define H USE(H) /* HALANT */
|
||||||
#define HN USE_HN /* HALANT_NUM */
|
#define HN USE(HN) /* HALANT_NUM */
|
||||||
#define HVM USE_HVM /* HALANT_OR_VOWEL_MODIFIER */
|
#define HVM USE(HVM) /* HALANT_OR_VOWEL_MODIFIER */
|
||||||
#define J USE_J /* HIEROGLYPH_JOINER */
|
#define J USE(J) /* HIEROGLYPH_JOINER */
|
||||||
#define N USE_N /* BASE_NUM */
|
#define N USE(N) /* BASE_NUM */
|
||||||
#define O USE_O /* OTHER */
|
#define O USE(O) /* OTHER */
|
||||||
#define R USE_R /* REPHA */
|
#define R USE(R) /* REPHA */
|
||||||
#define S USE_S /* SYM */
|
#define S USE(S) /* SYM */
|
||||||
#define SB USE_SB /* HIEROGLYPH_SEGMENT_BEGIN */
|
#define SB USE(SB) /* HIEROGLYPH_SEGMENT_BEGIN */
|
||||||
#define SE USE_SE /* HIEROGLYPH_SEGMENT_END */
|
#define SE USE(SE) /* HIEROGLYPH_SEGMENT_END */
|
||||||
#define SUB USE_SUB /* CONS_SUB */
|
#define SUB USE(SUB) /* CONS_SUB */
|
||||||
#define Sk USE_Sk /* SAKOT */
|
#define Sk USE(Sk) /* SAKOT */
|
||||||
#define ZWNJ USE_ZWNJ /* ZWNJ */
|
#define ZWNJ USE(ZWNJ) /* ZWNJ */
|
||||||
#define CMAbv USE_CMAbv
|
#define CMAbv USE(CMAbv)
|
||||||
#define CMBlw USE_CMBlw
|
#define CMBlw USE(CMBlw)
|
||||||
#define FAbv USE_FAbv
|
#define FAbv USE(FAbv)
|
||||||
#define FBlw USE_FBlw
|
#define FBlw USE(FBlw)
|
||||||
#define FPst USE_FPst
|
#define FPst USE(FPst)
|
||||||
#define FMAbv USE_FMAbv
|
#define FMAbv USE(FMAbv)
|
||||||
#define FMBlw USE_FMBlw
|
#define FMBlw USE(FMBlw)
|
||||||
#define FMPst USE_FMPst
|
#define FMPst USE(FMPst)
|
||||||
#define MAbv USE_MAbv
|
#define MAbv USE(MAbv)
|
||||||
#define MBlw USE_MBlw
|
#define MBlw USE(MBlw)
|
||||||
#define MPst USE_MPst
|
#define MPst USE(MPst)
|
||||||
#define MPre USE_MPre
|
#define MPre USE(MPre)
|
||||||
#define SMAbv USE_SMAbv
|
#define SMAbv USE(SMAbv)
|
||||||
#define SMBlw USE_SMBlw
|
#define SMBlw USE(SMBlw)
|
||||||
#define VAbv USE_VAbv
|
#define VAbv USE(VAbv)
|
||||||
#define VBlw USE_VBlw
|
#define VBlw USE(VBlw)
|
||||||
#define VPst USE_VPst
|
#define VPst USE(VPst)
|
||||||
#define VPre USE_VPre
|
#define VPre USE(VPre)
|
||||||
#define VMAbv USE_VMAbv
|
#define VMAbv USE(VMAbv)
|
||||||
#define VMBlw USE_VMBlw
|
#define VMBlw USE(VMBlw)
|
||||||
#define VMPst USE_VMPst
|
#define VMPst USE(VMPst)
|
||||||
#define VMPre USE_VMPre
|
#define VMPre USE(VMPre)
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
static const USE_TABLE_ELEMENT_TYPE use_table[] = {
|
static const USE_TABLE_ELEMENT_TYPE use_table[] = {
|
||||||
|
@ -1154,7 +1155,7 @@ hb_use_get_category (hb_codepoint_t u)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return USE_O;
|
return USE(O);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef B
|
#undef B
|
||||||
|
|
|
@ -221,7 +221,7 @@ setup_rphf_mask (const hb_ot_shape_plan_t *plan,
|
||||||
|
|
||||||
foreach_syllable (buffer, start, end)
|
foreach_syllable (buffer, start, end)
|
||||||
{
|
{
|
||||||
unsigned int limit = info[start].use_category() == USE_R ? 1 : hb_min (3u, end - start);
|
unsigned int limit = info[start].use_category() == USE(R) ? 1 : hb_min (3u, end - start);
|
||||||
for (unsigned int i = start; i < start + limit; i++)
|
for (unsigned int i = start; i < start + limit; i++)
|
||||||
info[i].mask |= mask;
|
info[i].mask |= mask;
|
||||||
}
|
}
|
||||||
|
@ -318,11 +318,11 @@ record_rphf_use (const hb_ot_shape_plan_t *plan,
|
||||||
|
|
||||||
foreach_syllable (buffer, start, end)
|
foreach_syllable (buffer, start, end)
|
||||||
{
|
{
|
||||||
/* Mark a substituted repha as USE_R. */
|
/* Mark a substituted repha as USE(R). */
|
||||||
for (unsigned int i = start; i < end && (info[i].mask & mask); i++)
|
for (unsigned int i = start; i < end && (info[i].mask & mask); i++)
|
||||||
if (_hb_glyph_info_substituted (&info[i]))
|
if (_hb_glyph_info_substituted (&info[i]))
|
||||||
{
|
{
|
||||||
info[i].use_category() = USE_R;
|
info[i].use_category() = USE(R);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -341,7 +341,7 @@ record_pref_use (const hb_ot_shape_plan_t *plan HB_UNUSED,
|
||||||
for (unsigned int i = start; i < end; i++)
|
for (unsigned int i = start; i < end; i++)
|
||||||
if (_hb_glyph_info_substituted (&info[i]))
|
if (_hb_glyph_info_substituted (&info[i]))
|
||||||
{
|
{
|
||||||
info[i].use_category() = USE_VPre;
|
info[i].use_category() = USE(VPre);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -350,7 +350,7 @@ record_pref_use (const hb_ot_shape_plan_t *plan HB_UNUSED,
|
||||||
static inline bool
|
static inline bool
|
||||||
is_halant_use (const hb_glyph_info_t &info)
|
is_halant_use (const hb_glyph_info_t &info)
|
||||||
{
|
{
|
||||||
return (info.use_category() == USE_H || info.use_category() == USE_HVM) &&
|
return (info.use_category() == USE(H) || info.use_category() == USE(HVM)) &&
|
||||||
!_hb_glyph_info_ligated (&info);
|
!_hb_glyph_info_ligated (&info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,24 +369,24 @@ reorder_syllable_use (hb_buffer_t *buffer, unsigned int start, unsigned int end)
|
||||||
|
|
||||||
hb_glyph_info_t *info = buffer->info;
|
hb_glyph_info_t *info = buffer->info;
|
||||||
|
|
||||||
#define POST_BASE_FLAGS64 (FLAG64 (USE_FAbv) | \
|
#define POST_BASE_FLAGS64 (FLAG64 (USE(FAbv)) | \
|
||||||
FLAG64 (USE_FBlw) | \
|
FLAG64 (USE(FBlw)) | \
|
||||||
FLAG64 (USE_FPst) | \
|
FLAG64 (USE(FPst)) | \
|
||||||
FLAG64 (USE_MAbv) | \
|
FLAG64 (USE(MAbv)) | \
|
||||||
FLAG64 (USE_MBlw) | \
|
FLAG64 (USE(MBlw)) | \
|
||||||
FLAG64 (USE_MPst) | \
|
FLAG64 (USE(MPst)) | \
|
||||||
FLAG64 (USE_MPre) | \
|
FLAG64 (USE(MPre)) | \
|
||||||
FLAG64 (USE_VAbv) | \
|
FLAG64 (USE(VAbv)) | \
|
||||||
FLAG64 (USE_VBlw) | \
|
FLAG64 (USE(VBlw)) | \
|
||||||
FLAG64 (USE_VPst) | \
|
FLAG64 (USE(VPst)) | \
|
||||||
FLAG64 (USE_VPre) | \
|
FLAG64 (USE(VPre)) | \
|
||||||
FLAG64 (USE_VMAbv) | \
|
FLAG64 (USE(VMAbv)) | \
|
||||||
FLAG64 (USE_VMBlw) | \
|
FLAG64 (USE(VMBlw)) | \
|
||||||
FLAG64 (USE_VMPst) | \
|
FLAG64 (USE(VMPst)) | \
|
||||||
FLAG64 (USE_VMPre))
|
FLAG64 (USE(VMPre)))
|
||||||
|
|
||||||
/* Move things forward. */
|
/* Move things forward. */
|
||||||
if (info[start].use_category() == USE_R && end - start > 1)
|
if (info[start].use_category() == USE(R) && end - start > 1)
|
||||||
{
|
{
|
||||||
/* Got a repha. Reorder it towards the end, but before the first post-base
|
/* Got a repha. Reorder it towards the end, but before the first post-base
|
||||||
* glyph. */
|
* glyph. */
|
||||||
|
@ -423,7 +423,7 @@ reorder_syllable_use (hb_buffer_t *buffer, unsigned int start, unsigned int end)
|
||||||
* shift things in between forward. */
|
* shift things in between forward. */
|
||||||
j = i + 1;
|
j = i + 1;
|
||||||
}
|
}
|
||||||
else if (((flag) & (FLAG (USE_VPre) | FLAG (USE_VMPre))) &&
|
else if (((flag) & (FLAG (USE(VPre)) | FLAG (USE(VMPre)))) &&
|
||||||
/* Only move the first component of a MultipleSubst. */
|
/* Only move the first component of a MultipleSubst. */
|
||||||
0 == _hb_glyph_info_get_lig_comp (&info[i]) &&
|
0 == _hb_glyph_info_get_lig_comp (&info[i]) &&
|
||||||
j < i)
|
j < i)
|
||||||
|
@ -445,8 +445,8 @@ reorder_use (const hb_ot_shape_plan_t *plan,
|
||||||
{
|
{
|
||||||
hb_syllabic_insert_dotted_circles (font, buffer,
|
hb_syllabic_insert_dotted_circles (font, buffer,
|
||||||
use_broken_cluster,
|
use_broken_cluster,
|
||||||
USE_B,
|
USE(B),
|
||||||
USE_R);
|
USE(R));
|
||||||
|
|
||||||
foreach_syllable (buffer, start, end)
|
foreach_syllable (buffer, start, end)
|
||||||
reorder_syllable_use (buffer, start, end);
|
reorder_syllable_use (buffer, start, end);
|
||||||
|
|
|
@ -36,58 +36,7 @@
|
||||||
|
|
||||||
#define USE_TABLE_ELEMENT_TYPE uint8_t
|
#define USE_TABLE_ELEMENT_TYPE uint8_t
|
||||||
|
|
||||||
/* Cateories used in the Universal Shaping Engine spec:
|
#define USE(Cat) use_syllable_machine_ex_##Cat
|
||||||
* https://docs.microsoft.com/en-us/typography/script-development/use
|
|
||||||
*/
|
|
||||||
/* Note: This enum is duplicated in the -machine.rl source file.
|
|
||||||
* Not sure how to avoid duplication. */
|
|
||||||
enum use_category_t {
|
|
||||||
USE_O = 0, /* OTHER */
|
|
||||||
|
|
||||||
USE_B = 1, /* BASE */
|
|
||||||
USE_N = 4, /* BASE_NUM */
|
|
||||||
USE_GB = 5, /* BASE_OTHER */
|
|
||||||
USE_SUB = 11, /* CONS_SUB */
|
|
||||||
USE_H = 12, /* HALANT */
|
|
||||||
|
|
||||||
USE_HN = 13, /* HALANT_NUM */
|
|
||||||
USE_ZWNJ = 14, /* Zero width non-joiner */
|
|
||||||
USE_R = 18, /* REPHA */
|
|
||||||
USE_S = 19, /* SYM */
|
|
||||||
USE_CS = 43, /* CONS_WITH_STACKER */
|
|
||||||
|
|
||||||
/* https://github.com/harfbuzz/harfbuzz/issues/1102 */
|
|
||||||
USE_HVM = 44, /* HALANT_OR_VOWEL_MODIFIER */
|
|
||||||
|
|
||||||
USE_Sk = 48, /* SAKOT */
|
|
||||||
USE_G = 49, /* HIEROGLYPH */
|
|
||||||
USE_J = 50, /* HIEROGLYPH_JOINER */
|
|
||||||
USE_SB = 51, /* HIEROGLYPH_SEGMENT_BEGIN */
|
|
||||||
USE_SE = 52, /* HIEROGLYPH_SEGMENT_END */
|
|
||||||
|
|
||||||
USE_FAbv = 24, /* CONS_FINAL_ABOVE */
|
|
||||||
USE_FBlw = 25, /* CONS_FINAL_BELOW */
|
|
||||||
USE_FPst = 26, /* CONS_FINAL_POST */
|
|
||||||
USE_MAbv = 27, /* CONS_MED_ABOVE */
|
|
||||||
USE_MBlw = 28, /* CONS_MED_BELOW */
|
|
||||||
USE_MPst = 29, /* CONS_MED_POST */
|
|
||||||
USE_MPre = 30, /* CONS_MED_PRE */
|
|
||||||
USE_CMAbv = 31, /* CONS_MOD_ABOVE */
|
|
||||||
USE_CMBlw = 32, /* CONS_MOD_BELOW */
|
|
||||||
USE_VAbv = 33, /* VOWEL_ABOVE / VOWEL_ABOVE_BELOW / VOWEL_ABOVE_BELOW_POST / VOWEL_ABOVE_POST */
|
|
||||||
USE_VBlw = 34, /* VOWEL_BELOW / VOWEL_BELOW_POST */
|
|
||||||
USE_VPst = 35, /* VOWEL_POST UIPC = Right */
|
|
||||||
USE_VPre = 22, /* VOWEL_PRE / VOWEL_PRE_ABOVE / VOWEL_PRE_ABOVE_POST / VOWEL_PRE_POST */
|
|
||||||
USE_VMAbv = 37, /* VOWEL_MOD_ABOVE */
|
|
||||||
USE_VMBlw = 38, /* VOWEL_MOD_BELOW */
|
|
||||||
USE_VMPst = 39, /* VOWEL_MOD_POST */
|
|
||||||
USE_VMPre = 23, /* VOWEL_MOD_PRE */
|
|
||||||
USE_SMAbv = 41, /* SYM_MOD_ABOVE */
|
|
||||||
USE_SMBlw = 42, /* SYM_MOD_BELOW */
|
|
||||||
USE_FMAbv = 45, /* CONS_FINAL_MOD UIPC = Top */
|
|
||||||
USE_FMBlw = 46, /* CONS_FINAL_MOD UIPC = Bottom */
|
|
||||||
USE_FMPst = 47, /* CONS_FINAL_MOD UIPC = Not_Applicable */
|
|
||||||
};
|
|
||||||
|
|
||||||
HB_INTERNAL USE_TABLE_ELEMENT_TYPE
|
HB_INTERNAL USE_TABLE_ELEMENT_TYPE
|
||||||
hb_use_get_category (hb_codepoint_t u);
|
hb_use_get_category (hb_codepoint_t u);
|
||||||
|
|
Loading…
Reference in New Issue