commit
c8195dbc01
|
@ -712,53 +712,60 @@ struct hb_ot_apply_context_t :
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _set_glyph_props (hb_codepoint_t glyph_index,
|
void _set_glyph_class (hb_codepoint_t glyph_index,
|
||||||
unsigned int class_guess = 0,
|
unsigned int class_guess = 0,
|
||||||
bool ligature = false,
|
bool ligature = false,
|
||||||
bool component = false) const
|
bool component = false) const
|
||||||
{
|
{
|
||||||
unsigned int add_in = _hb_glyph_info_get_glyph_props (&buffer->cur()) &
|
unsigned int props = _hb_glyph_info_get_glyph_props (&buffer->cur());
|
||||||
HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
|
props |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
|
||||||
add_in |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
|
|
||||||
if (ligature)
|
if (ligature)
|
||||||
{
|
{
|
||||||
add_in |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;
|
props |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;
|
||||||
/* In the only place that the MULTIPLIED bit is used, Uniscribe
|
/* In the only place that the MULTIPLIED bit is used, Uniscribe
|
||||||
* seems to only care about the "last" transformation between
|
* seems to only care about the "last" transformation between
|
||||||
* Ligature and Multiple substitutions. Ie. if you ligate, expand,
|
* Ligature and Multiple substitutions. Ie. if you ligate, expand,
|
||||||
* and ligate again, it forgives the multiplication and acts as
|
* and ligate again, it forgives the multiplication and acts as
|
||||||
* if only ligation happened. As such, clear MULTIPLIED bit.
|
* if only ligation happened. As such, clear MULTIPLIED bit.
|
||||||
*/
|
*/
|
||||||
add_in &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
|
props &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
|
||||||
}
|
}
|
||||||
if (component)
|
if (component)
|
||||||
add_in |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
|
props |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
|
||||||
if (likely (has_glyph_classes))
|
if (likely (has_glyph_classes))
|
||||||
_hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | gdef.get_glyph_props (glyph_index));
|
{
|
||||||
|
props &= HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
|
||||||
|
_hb_glyph_info_set_glyph_props (&buffer->cur(), props | gdef.get_glyph_props (glyph_index));
|
||||||
|
}
|
||||||
else if (class_guess)
|
else if (class_guess)
|
||||||
_hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | class_guess);
|
{
|
||||||
|
props &= HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
|
||||||
|
_hb_glyph_info_set_glyph_props (&buffer->cur(), props | class_guess);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_hb_glyph_info_set_glyph_props (&buffer->cur(), props);
|
||||||
}
|
}
|
||||||
|
|
||||||
void replace_glyph (hb_codepoint_t glyph_index) const
|
void replace_glyph (hb_codepoint_t glyph_index) const
|
||||||
{
|
{
|
||||||
_set_glyph_props (glyph_index);
|
_set_glyph_class (glyph_index);
|
||||||
(void) buffer->replace_glyph (glyph_index);
|
(void) buffer->replace_glyph (glyph_index);
|
||||||
}
|
}
|
||||||
void replace_glyph_inplace (hb_codepoint_t glyph_index) const
|
void replace_glyph_inplace (hb_codepoint_t glyph_index) const
|
||||||
{
|
{
|
||||||
_set_glyph_props (glyph_index);
|
_set_glyph_class (glyph_index);
|
||||||
buffer->cur().codepoint = glyph_index;
|
buffer->cur().codepoint = glyph_index;
|
||||||
}
|
}
|
||||||
void replace_glyph_with_ligature (hb_codepoint_t glyph_index,
|
void replace_glyph_with_ligature (hb_codepoint_t glyph_index,
|
||||||
unsigned int class_guess) const
|
unsigned int class_guess) const
|
||||||
{
|
{
|
||||||
_set_glyph_props (glyph_index, class_guess, true);
|
_set_glyph_class (glyph_index, class_guess, true);
|
||||||
(void) buffer->replace_glyph (glyph_index);
|
(void) buffer->replace_glyph (glyph_index);
|
||||||
}
|
}
|
||||||
void output_glyph_for_component (hb_codepoint_t glyph_index,
|
void output_glyph_for_component (hb_codepoint_t glyph_index,
|
||||||
unsigned int class_guess) const
|
unsigned int class_guess) const
|
||||||
{
|
{
|
||||||
_set_glyph_props (glyph_index, class_guess, false, true);
|
_set_glyph_class (glyph_index, class_guess, false, true);
|
||||||
(void) buffer->output_glyph (glyph_index);
|
(void) buffer->output_glyph (glyph_index);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,6 +19,7 @@ TESTS = \
|
||||||
tests/emoji.tests \
|
tests/emoji.tests \
|
||||||
tests/emoji-clusters.tests \
|
tests/emoji-clusters.tests \
|
||||||
tests/fallback-positioning.tests \
|
tests/fallback-positioning.tests \
|
||||||
|
tests/glyph-props-no-gdef.tests \
|
||||||
tests/hangul-jamo.tests \
|
tests/hangul-jamo.tests \
|
||||||
tests/hyphens.tests \
|
tests/hyphens.tests \
|
||||||
tests/indic-consonant-with-stacker.tests \
|
tests/indic-consonant-with-stacker.tests \
|
||||||
|
@ -45,6 +46,7 @@ TESTS = \
|
||||||
tests/myanmar-misc.tests \
|
tests/myanmar-misc.tests \
|
||||||
tests/myanmar-syllable.tests \
|
tests/myanmar-syllable.tests \
|
||||||
tests/myanmar-zawgyi.tests \
|
tests/myanmar-zawgyi.tests \
|
||||||
|
tests/nested-mark-filtering-sets.tests \
|
||||||
tests/none-directional.tests \
|
tests/none-directional.tests \
|
||||||
tests/positioning-features.tests \
|
tests/positioning-features.tests \
|
||||||
tests/rand.tests \
|
tests/rand.tests \
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -19,6 +19,7 @@ in_house_tests_base = [
|
||||||
'emoji.tests',
|
'emoji.tests',
|
||||||
'emoji-clusters.tests',
|
'emoji-clusters.tests',
|
||||||
'fallback-positioning.tests',
|
'fallback-positioning.tests',
|
||||||
|
'glyph-props-no-gdef.tests',
|
||||||
'hangul-jamo.tests',
|
'hangul-jamo.tests',
|
||||||
'hyphens.tests',
|
'hyphens.tests',
|
||||||
'indic-consonant-with-stacker.tests',
|
'indic-consonant-with-stacker.tests',
|
||||||
|
@ -45,6 +46,7 @@ in_house_tests_base = [
|
||||||
'myanmar-misc.tests',
|
'myanmar-misc.tests',
|
||||||
'myanmar-syllable.tests',
|
'myanmar-syllable.tests',
|
||||||
'myanmar-zawgyi.tests',
|
'myanmar-zawgyi.tests',
|
||||||
|
'nested-mark-filtering-sets.tests',
|
||||||
'none-directional.tests',
|
'none-directional.tests',
|
||||||
'positioning-features.tests',
|
'positioning-features.tests',
|
||||||
'rand.tests',
|
'rand.tests',
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
../fonts/FallbackPlus-Javanese-no-GDEF.otf;;U+A995,U+A9BF;[glyph01=0+600|uniA995=0+600]
|
|
@ -0,0 +1,4 @@
|
||||||
|
../fonts/NotoNastaliqUrdu-Regular.ttf;;U+0628,U+0628,U+6D2;[OneDotBelowYB=2@764,-183+0|YBc1=2@764,-282+0|YehBarreeFin_3=2+355|OneDotBelowNS=1@20,-120+0|BehxMed.inT2outD2YB=1@0,349+182|NullMk=0+0|sp10=0+0|BehxIni.outT2=0@0,406+766]
|
||||||
|
../fonts/NotoNastaliqUrdu-Regular.ttf;;U+0628,U+0628,U+0628,U+6D2;[OneDotBelowYB=3@764,-183+0|YBc1=3@764,-282+0|OneDotBelowYB=3@1098,-60+0|YBc2=3@1098,-159+0|YehBarreeFin_4=3+355|OneDotBelowNS=2@20,-120+0|BehxMed.inT2outD2YB=2@0,349+182|NullMk=1+0|BehxMed.inT1outT2=1@0,406+184|NullMk=0+0|sp5=0+0|BehxIni=0@0,471+541]
|
||||||
|
../fonts/NotoNastaliqUrdu-Regular.ttf;;U+0628,U+0628,U+0628,U+0628,U+6D2;[OneDotBelowYB=4@659,-192+0|YBc1=4@659,-291+0|OneDotBelowYB=4@966,-55+0|YBc2=4@966,-154+0|OneDotBelowYB=4@1274,-148+0|YBc3=4@1274,-247+0|YehBarreeFin_5=4+355|OneDotBelowNS=3@20,-120+0|BehxMed.inT2outD2YB=3@0,349+182|NullMk=2+0|BehxMed.inT1outT2=2@0,406+184|NullMk=1+0|BehxMed.inT2outT1=1@0,471+267|NullMk=0+0|sp0=0+0|BehxIni.outT2=0@0,616+156]
|
||||||
|
../fonts/NotoNastaliqUrdu-Regular.ttf;;U+0628,U+0628,U+0628,U+0628,U+0628,U+6D2;[OneDotBelowYB=5@659,-192+0|YBc1=5@659,-291+0|OneDotBelowYB=5@966,-55+0|YBc2=5@966,-154+0|OneDotBelowYB=5@1274,-148+0|YBc3=5@1274,-247+0|YehBarreeFin_5=5+355|OneDotBelowNS=4@20,-120+0|BehxMed.inT2outD2YB=4@0,349+182|NullMk=3+0|BehxMed.inT1outT2=3@0,406+184|NullMk=2+0|BehxMed.inT2outT1=2@0,471+267|NullMk=1+0|BehxMed.inT1outT2=1@0,616+184|OneDotBelowNS=0@73,516+0|sp0=0+0|BehxIni=0@0,681+236]
|
Loading…
Reference in New Issue