This commit is contained in:
Behdad Esfahbod 2012-05-13 16:48:03 +02:00
parent 5e4e21fce4
commit 617f4ac46f
1 changed files with 23 additions and 21 deletions

View File

@ -250,6 +250,7 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
{ {
hb_glyph_info_t *info = buffer->info; hb_glyph_info_t *info = buffer->info;
/* 1. Find base consonant: /* 1. Find base consonant:
* *
* The shaping engine finds the base consonant of the syllable, using the * The shaping engine finds the base consonant of the syllable, using the
@ -267,22 +268,22 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
unsigned int base = end; unsigned int base = end;
bool has_reph = false; bool has_reph = false;
/* -> If the syllable starts with Ra + Halant (in a script that has Reph)
* and has more than one consonant, Ra is excluded from candidates for
* base consonants. */
unsigned int limit = start;
if (mask_array[RPHF] &&
start + 3 <= end &&
info[start].indic_category() == OT_Ra &&
info[start + 1].indic_category() == OT_H &&
!is_joiner (info[start + 2]))
{ {
limit += 2; /* -> If the syllable starts with Ra + Halant (in a script that has Reph)
base = start; * and has more than one consonant, Ra is excluded from candidates for
has_reph = true; * base consonants. */
}; unsigned int limit = start;
if (mask_array[RPHF] &&
start + 3 <= end &&
info[start].indic_category() == OT_Ra &&
info[start + 1].indic_category() == OT_H &&
!is_joiner (info[start + 2]))
{
limit += 2;
base = start;
has_reph = true;
};
{
/* -> starting from the end of the syllable, move backwards */ /* -> starting from the end of the syllable, move backwards */
unsigned int i = end; unsigned int i = end;
do { do {
@ -314,14 +315,15 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
} while (i > limit); } while (i > limit);
if (base < start) if (base < start)
base = start; /* Just in case... */ base = start; /* Just in case... */
}
/* -> If the syllable starts with Ra + Halant (in a script that has Reph)
* and has more than one consonant, Ra is excluded from candidates for /* -> If the syllable starts with Ra + Halant (in a script that has Reph)
* base consonants. */ * and has more than one consonant, Ra is excluded from candidates for
if (has_reph && base == start) { * base consonants. */
/* Have no other consonant, so Reph is not formed and Ra becomes base. */ if (has_reph && base == start) {
has_reph = false; /* Have no other consonant, so Reph is not formed and Ra becomes base. */
has_reph = false;
}
} }