|
@ -208,7 +208,7 @@ match(void) |
|
|
|
|
|
|
|
|
char buf[sizeof text], *s; |
|
|
char buf[sizeof text], *s; |
|
|
int i, tokc = 0; |
|
|
int i, tokc = 0; |
|
|
size_t len; |
|
|
|
|
|
|
|
|
size_t len, textsize; |
|
|
struct item *item, *lprefix, *lsubstr, *prefixend, *substrend; |
|
|
struct item *item, *lprefix, *lsubstr, *prefixend, *substrend; |
|
|
|
|
|
|
|
|
strcpy(buf, text); |
|
|
strcpy(buf, text); |
|
@ -219,6 +219,7 @@ match(void) |
|
|
len = tokc ? strlen(tokv[0]) : 0; |
|
|
len = tokc ? strlen(tokv[0]) : 0; |
|
|
|
|
|
|
|
|
matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL; |
|
|
matches = lprefix = lsubstr = matchend = prefixend = substrend = NULL; |
|
|
|
|
|
textsize = strlen(text) + 1; |
|
|
for (item = items; item && item->text; item++) { |
|
|
for (item = items; item && item->text; item++) { |
|
|
for (i = 0; i < tokc; i++) |
|
|
for (i = 0; i < tokc; i++) |
|
|
if (!fstrstr(item->text, tokv[i])) |
|
|
if (!fstrstr(item->text, tokv[i])) |
|
@ -226,7 +227,7 @@ match(void) |
|
|
if (i != tokc) /* not all tokens match */ |
|
|
if (i != tokc) /* not all tokens match */ |
|
|
continue; |
|
|
continue; |
|
|
/* exact matches go first, then prefixes, then substrings */ |
|
|
/* exact matches go first, then prefixes, then substrings */ |
|
|
if (!tokc || !fstrncmp(tokv[0], item->text, len + 1)) |
|
|
|
|
|
|
|
|
if (!tokc || !fstrncmp(text, item->text, textsize)) |
|
|
appenditem(item, &matches, &matchend); |
|
|
appenditem(item, &matches, &matchend); |
|
|
else if (!fstrncmp(tokv[0], item->text, len)) |
|
|
else if (!fstrncmp(tokv[0], item->text, len)) |
|
|
appenditem(item, &lprefix, &prefixend); |
|
|
appenditem(item, &lprefix, &prefixend); |
|
|