|
|
@@ -1573,6 +1573,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ |
|
|
|
unsigned char rb; // current instuction from rule |
|
|
|
unsigned char letter; // current letter from input word, single byte |
|
|
|
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) |
|
|
|
unsigned char last_letter; |
|
|
|
|
|
|
@@ -1631,6 +1632,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ |
|
|
|
match_type = 0; |
|
|
|
consumed = 0; |
|
|
|
letter = 0; |
|
|
|
letter_w = 0; |
|
|
|
distance_right = -6; // used to reduce points for matches further away the current letter |
|
|
|
distance_left = -2; |
|
|
|
check_atstart = 0; |
|
|
@@ -1735,6 +1737,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ |
|
|
|
if (distance_right > 18) |
|
|
|
distance_right = 19; |
|
|
|
last_letter = letter; |
|
|
|
last_letter_w = letter_w; |
|
|
|
letter_xbytes = utf8_in(&letter_w, post_ptr)-1; |
|
|
|
letter = *post_ptr++; |
|
|
|
|
|
|
@@ -1788,7 +1791,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ |
|
|
|
failed = 1; |
|
|
|
break; |
|
|
|
case RULE_DOUBLE: |
|
|
|
if (letter == last_letter) |
|
|
|
if (letter_w == last_letter_w) |
|
|
|
add_points = (21-distance_right); |
|
|
|
else |
|
|
|
failed = 1; |
|
|
@@ -1941,6 +1944,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ |
|
|
|
distance_left = 19; |
|
|
|
|
|
|
|
last_letter = *pre_ptr; |
|
|
|
utf8_in(&last_letter_w, pre_ptr); |
|
|
|
pre_ptr--; |
|
|
|
letter_xbytes = utf8_in2(&letter_w, pre_ptr, 1)-1; |
|
|
|
letter = *pre_ptr; |
|
|
@@ -1976,7 +1980,7 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_ |
|
|
|
failed = 1; |
|
|
|
break; |
|
|
|
case RULE_DOUBLE: |
|
|
|
if (letter == last_letter) |
|
|
|
if (letter_w == last_letter_w) |
|
|
|
add_points = (21-distance_left); |
|
|
|
else |
|
|
|
failed = 1; |