/* Do not remove the headers from this file! see /USAGE for more info. */ // Rust: I intend to make a version where you can't use regexps in completion. // Quick working thing tho. #include <mudlib.h> //:MODULE //Various functions for expanding partial matches //:FUNCTION complete //Given a string and a list of possible completions of that string, //return an array of all strings that would be valid completions. string* complete(string partial, string* potentials) { int n = sizeof(partial) - 1; return filter(potentials, (: $1[0..$(n)] == $(partial) :)); } //:FUNCTION case_insensitive_complete //same as complete, but upper and lower case are ignored. string* case_insensitive_complete(string partial, string* potentials) { int n = strlen(partial) - 1; partial = lower_case(partial); return filter(potentials, (: lower_case($1[0..$(n)]) == $(partial) :)); } //:FUNCTION find_best_match_or_complete // same as case_insensitive_complete, but if there is an exact match, // returns only that. string *find_best_match_or_complete(string partial, string *potentials) { string *p = map(potentials,(:lower_case:)); int i = member_array(lower_case(partial),p); if(i!=-1) return ({potentials[i]}); return case_insensitive_complete(partial,potentials); } //:FUNCTION complete_user //given a username that might be partial, returns a //user name, or an array of strings on a partial match, or 0 on no match. mixed complete_user(string name) { object* matches = filter(users(), (: strsrch($1->query_userid(),$2) != -1 :), lower_case(name)); switch(sizeof(matches)) { case 0: return 0; case 1: return matches[0]->query_userid(); default: return map(matches, (: $1->query_userid() :)); } }