[expansion] Fixing cases like ML King where a global (all languages) expansion subsumes the specific language expansion (like English)
This commit is contained in:
@@ -23,7 +23,7 @@ typedef struct phrase_language {
|
|||||||
|
|
||||||
VECTOR_INIT(phrase_language_array, phrase_language_t)
|
VECTOR_INIT(phrase_language_array, phrase_language_t)
|
||||||
|
|
||||||
#define ks_lt_phrase_language(a, b) ((a).phrase.start < (b).phrase.start)
|
#define ks_lt_phrase_language(a, b) ((a).phrase.start < (b).phrase.start || ((a).phrase.start == (b).phrase.start && (a).phrase.len > (b).phrase.len))
|
||||||
|
|
||||||
KSORT_INIT(phrase_language_array, phrase_language_t, ks_lt_phrase_language)
|
KSORT_INIT(phrase_language_array, phrase_language_t, ks_lt_phrase_language)
|
||||||
|
|
||||||
@@ -167,6 +167,12 @@ string_tree_t *add_string_alternatives(char *str, normalize_options_t options) {
|
|||||||
|
|
||||||
for (int i = 0; i < phrases->n; i++) {
|
for (int i = 0; i < phrases->n; i++) {
|
||||||
phrase_lang = phrases->a[i];
|
phrase_lang = phrases->a[i];
|
||||||
|
|
||||||
|
phrase_t phrase = phrase_lang.phrase;
|
||||||
|
if (phrase.start < start) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
char_array_clear(key);
|
char_array_clear(key);
|
||||||
|
|
||||||
char_array_cat(key, phrase_lang.language);
|
char_array_cat(key, phrase_lang.language);
|
||||||
@@ -174,8 +180,6 @@ string_tree_t *add_string_alternatives(char *str, normalize_options_t options) {
|
|||||||
|
|
||||||
size_t namespace_len = key->n;
|
size_t namespace_len = key->n;
|
||||||
|
|
||||||
phrase_t phrase = phrase_lang.phrase;
|
|
||||||
|
|
||||||
end = phrase.start;
|
end = phrase.start;
|
||||||
|
|
||||||
for (int j = start; j < end; j++) {
|
for (int j = start; j < end; j++) {
|
||||||
@@ -196,7 +200,7 @@ string_tree_t *add_string_alternatives(char *str, normalize_options_t options) {
|
|||||||
|
|
||||||
token_t token;
|
token_t token;
|
||||||
|
|
||||||
if (value.components & options.address_components) {
|
if ((value.components & options.address_components) > 0) {
|
||||||
key->n = namespace_len;
|
key->n = namespace_len;
|
||||||
for (int j = phrase.start; j < phrase.start + phrase.len; j++) {
|
for (int j = phrase.start; j < phrase.start + phrase.len; j++) {
|
||||||
token = tokens->a[j];
|
token = tokens->a[j];
|
||||||
|
|||||||
Reference in New Issue
Block a user