Browse Source

Fix for issue #195 Different non-Latin diacritized consonants are wrongly considered as one doubled

master
Valdis Vitolins 8 years ago
parent
commit
059543ceb0
1 changed files with 6 additions and 2 deletions
  1. 6
    2
      src/libespeak-ng/dictionary.c

+ 6
- 2
src/libespeak-ng/dictionary.c View File

unsigned char rb; // current instuction from rule unsigned char rb; // current instuction from rule
unsigned char letter; // current letter from input word, single byte unsigned char letter; // current letter from input word, single byte
int letter_w; // current letter, wide character int letter_w; // current letter, wide character
int last_letter_w; // last letter, wide character
int letter_xbytes; // number of extra bytes of multibyte character (num bytes - 1) int letter_xbytes; // number of extra bytes of multibyte character (num bytes - 1)
unsigned char last_letter; unsigned char last_letter;


match_type = 0; match_type = 0;
consumed = 0; consumed = 0;
letter = 0; letter = 0;
letter_w = 0;
distance_right = -6; // used to reduce points for matches further away the current letter distance_right = -6; // used to reduce points for matches further away the current letter
distance_left = -2; distance_left = -2;
check_atstart = 0; check_atstart = 0;
if (distance_right > 18) if (distance_right > 18)
distance_right = 19; distance_right = 19;
last_letter = letter; last_letter = letter;
last_letter_w = letter_w;
letter_xbytes = utf8_in(&letter_w, post_ptr)-1; letter_xbytes = utf8_in(&letter_w, post_ptr)-1;
letter = *post_ptr++; letter = *post_ptr++;


failed = 1; failed = 1;
break; break;
case RULE_DOUBLE: case RULE_DOUBLE:
if (letter == last_letter)
if (letter_w == last_letter_w)
add_points = (21-distance_right); add_points = (21-distance_right);
else else
failed = 1; failed = 1;
distance_left = 19; distance_left = 19;


last_letter = *pre_ptr; last_letter = *pre_ptr;
utf8_in(&last_letter_w, pre_ptr);
pre_ptr--; pre_ptr--;
letter_xbytes = utf8_in2(&letter_w, pre_ptr, 1)-1; letter_xbytes = utf8_in2(&letter_w, pre_ptr, 1)-1;
letter = *pre_ptr; letter = *pre_ptr;
failed = 1; failed = 1;
break; break;
case RULE_DOUBLE: case RULE_DOUBLE:
if (letter == last_letter)
if (letter_w == last_letter_w)
add_points = (21-distance_left); add_points = (21-distance_left);
else else
failed = 1; failed = 1;

Loading…
Cancel
Save