- if(!i->matched && !strncasecmp(pattern, i->text, plen))
- j = appenditem(i, j);
-
- for (i = allitems; i; i = i->next)
- if(!i->matched && strcasestr(i->text, pattern))
- j = appenditem(i, j);
-
- if(idomatch)
- for (i = allitems; i; i = i->next)
- if(!i->matched && strcaseido(i->text, pattern))
- j = appenditem(i, j);
-
+ if(!fstrncmp(pattern, i->text, plen + 1)) {
+ appenditem(i, &lexact, &exactend);
+ nitem++;
+ }
+ else if(!fstrncmp(pattern, i->text, plen)) {
+ appenditem(i, &lprefix, &prefixend);
+ nitem++;
+ }
+ else if(fstrstr(i->text, pattern)) {
+ appenditem(i, &lsubstr, &substrend);
+ nitem++;
+ }
+ if(lexact) {
+ item = lexact;
+ itemend = exactend;
+ }
+ if(lprefix) {
+ if(itemend) {
+ itemend->right - lprefix;
+ lprefix->left = itemend;
+ }
+ else
+ item = lprefix;
+ itemend = prefixend;
+ }
+ if(lsubstr) {
+ if(itemend) {
+ itemend->right = lsubstr;
+ lsubstr->left = itemend;
+ }
+ else
+ item = lsubstr;
+ }