Minor
This commit is contained in:
parent
c071b99f15
commit
3c2ea9481b
|
@ -213,7 +213,6 @@ static void
|
||||||
initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buffer, hb_mask_t *mask_array,
|
initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buffer, hb_mask_t *mask_array,
|
||||||
unsigned int start, unsigned int end)
|
unsigned int start, unsigned int end)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
|
||||||
hb_glyph_info_t *info = buffer->info;
|
hb_glyph_info_t *info = buffer->info;
|
||||||
|
|
||||||
/* Comments from:
|
/* Comments from:
|
||||||
|
@ -251,37 +250,39 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
|
||||||
has_reph = true;
|
has_reph = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* -> starting from the end of the syllable, move backwards */
|
{
|
||||||
i = end;
|
/* -> starting from the end of the syllable, move backwards */
|
||||||
do {
|
unsigned int i = end;
|
||||||
i--;
|
do {
|
||||||
/* -> until a consonant is found */
|
i--;
|
||||||
if (is_consonant (info[i]))
|
/* -> until a consonant is found */
|
||||||
{
|
if (is_consonant (info[i]))
|
||||||
/* -> that does not have a below-base or post-base form
|
|
||||||
* (post-base forms have to follow below-base forms), */
|
|
||||||
if (info[i].indic_position() != POS_BELOW_C &&
|
|
||||||
info[i].indic_position() != POS_POST_C)
|
|
||||||
{
|
{
|
||||||
base = i;
|
/* -> that does not have a below-base or post-base form
|
||||||
break;
|
* (post-base forms have to follow below-base forms), */
|
||||||
|
if (info[i].indic_position() != POS_BELOW_C &&
|
||||||
|
info[i].indic_position() != POS_POST_C)
|
||||||
|
{
|
||||||
|
base = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -> or that is not a pre-base reordering Ra,
|
||||||
|
*
|
||||||
|
* TODO
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* -> or arrive at the first consonant. The consonant stopped at will
|
||||||
|
* be the base. */
|
||||||
|
base = i;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
/* -> or that is not a pre-base reordering Ra,
|
if (is_joiner (info[i]))
|
||||||
*
|
break;
|
||||||
* TODO
|
} while (i > limit);
|
||||||
*/
|
if (base < start)
|
||||||
|
base = start; /* Just in case... */
|
||||||
/* -> or arrive at the first consonant. The consonant stopped at will
|
}
|
||||||
* be the base. */
|
|
||||||
base = i;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (is_joiner (info[i]))
|
|
||||||
break;
|
|
||||||
} while (i > limit);
|
|
||||||
if (base < start)
|
|
||||||
base = start; /* Just in case... */
|
|
||||||
|
|
||||||
/* -> If the syllable starts with Ra + Halant (in a script that has Reph)
|
/* -> 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
|
* and has more than one consonant, Ra is excluded from candidates for
|
||||||
|
@ -326,7 +327,7 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
|
||||||
|
|
||||||
/* Reorder characters */
|
/* Reorder characters */
|
||||||
|
|
||||||
for (i = start; i < base; i++)
|
for (unsigned int i = start; i < base; i++)
|
||||||
info[i].indic_position() = POS_PRE_C;
|
info[i].indic_position() = POS_PRE_C;
|
||||||
info[base].indic_position() = POS_BASE_C;
|
info[base].indic_position() = POS_BASE_C;
|
||||||
|
|
||||||
|
@ -338,7 +339,7 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
|
||||||
* last consonant. */
|
* last consonant. */
|
||||||
if ((map->get_chosen_script (0) & 0x000000FF) != '2') {
|
if ((map->get_chosen_script (0) & 0x000000FF) != '2') {
|
||||||
/* We should only do this for Indic scripts which have a version two I guess. */
|
/* We should only do this for Indic scripts which have a version two I guess. */
|
||||||
for (i = base + 1; i < end; i++)
|
for (unsigned int i = base + 1; i < end; i++)
|
||||||
if (info[i].indic_category() == OT_H) {
|
if (info[i].indic_category() == OT_H) {
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
for (j = end - 1; j > i; j--)
|
for (j = end - 1; j > i; j--)
|
||||||
|
@ -355,7 +356,7 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attach ZWJ, ZWNJ, nukta, and halant to previous char to move with them. */
|
/* Attach ZWJ, ZWNJ, nukta, and halant to previous char to move with them. */
|
||||||
for (i = start + 1; i < end; i++)
|
for (unsigned int i = start + 1; i < end; i++)
|
||||||
if ((FLAG (info[i].indic_category()) &
|
if ((FLAG (info[i].indic_category()) &
|
||||||
(FLAG (OT_ZWNJ) | FLAG (OT_ZWJ) | FLAG (OT_N) | FLAG (OT_H))))
|
(FLAG (OT_ZWNJ) | FLAG (OT_ZWJ) | FLAG (OT_N) | FLAG (OT_H))))
|
||||||
info[i].indic_position() = info[i - 1].indic_position();
|
info[i].indic_position() = info[i - 1].indic_position();
|
||||||
|
@ -367,7 +368,7 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
|
||||||
hb_bubble_sort (info + start, end - start, compare_indic_order);
|
hb_bubble_sort (info + start, end - start, compare_indic_order);
|
||||||
/* Find base again */
|
/* Find base again */
|
||||||
base = end;
|
base = end;
|
||||||
for (i = start; i < end; i++)
|
for (unsigned int i = start; i < end; i++)
|
||||||
if (info[i].indic_position() == POS_BASE_C) {
|
if (info[i].indic_position() == POS_BASE_C) {
|
||||||
base = i;
|
base = i;
|
||||||
break;
|
break;
|
||||||
|
@ -385,19 +386,19 @@ initial_reordering_consonant_syllable (const hb_ot_map_t *map, hb_buffer_t *buff
|
||||||
|
|
||||||
/* Pre-base */
|
/* Pre-base */
|
||||||
mask = mask_array[HALF] | mask_array[AKHN] | mask_array[CJCT];
|
mask = mask_array[HALF] | mask_array[AKHN] | mask_array[CJCT];
|
||||||
for (i = start; i < base; i++)
|
for (unsigned int i = start; i < base; i++)
|
||||||
info[i].mask |= mask;
|
info[i].mask |= mask;
|
||||||
/* Base */
|
/* Base */
|
||||||
mask = mask_array[AKHN] | mask_array[CJCT];
|
mask = mask_array[AKHN] | mask_array[CJCT];
|
||||||
info[base].mask |= mask;
|
info[base].mask |= mask;
|
||||||
/* Post-base */
|
/* Post-base */
|
||||||
mask = mask_array[BLWF] | mask_array[PSTF] | mask_array[CJCT];
|
mask = mask_array[BLWF] | mask_array[PSTF] | mask_array[CJCT];
|
||||||
for (i = base + 1; i < end; i++)
|
for (unsigned int i = base + 1; i < end; i++)
|
||||||
info[i].mask |= mask;
|
info[i].mask |= mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Apply ZWJ/ZWNJ effects */
|
/* Apply ZWJ/ZWNJ effects */
|
||||||
for (i = start + 1; i < end; i++)
|
for (unsigned int i = start + 1; i < end; i++)
|
||||||
if (is_joiner (info[i])) {
|
if (is_joiner (info[i])) {
|
||||||
bool non_joiner = info[i].indic_category() == OT_ZWNJ;
|
bool non_joiner = info[i].indic_category() == OT_ZWNJ;
|
||||||
unsigned int j = i;
|
unsigned int j = i;
|
||||||
|
|
Loading…
Reference in New Issue