Skip to content

Commit

Permalink
Refactor|Console: Searching for known words that match the pattern ex…
Browse files Browse the repository at this point in the history
…actly

AFAICS, there is no other way to locate a particular known word.
  • Loading branch information
skyjake committed Jul 31, 2013
1 parent 5575db0 commit 77c6605
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 12 deletions.
10 changes: 10 additions & 0 deletions doomsday/client/include/con_main.h
Expand Up @@ -323,6 +323,16 @@ void Con_AbnormalShutdown(const char* error);
int Con_IterateKnownWords(const char* pattern, knownwordtype_t type,
int (*callback)(const knownword_t* word, void* parameters), void* parameters);

enum KnownWordMatchMode {
KnownWordExactMatch, // case insensitive
KnownWordStartsWith // case insensitive
};

int Con_IterateKnownWords(KnownWordMatchMode matchMode,
const char* pattern, knownwordtype_t type,
int (*callback)(const knownword_t* word, void* parameters),
void* parameters);

/**
* Collect an array of knownWords which match the given word (at least
* partially).
Expand Down
34 changes: 25 additions & 9 deletions doomsday/client/src/con_data.cpp
Expand Up @@ -833,6 +833,7 @@ de::String Con_VarAsStyledText(cvar_t *var, char const *prefix)
DENG_ASSERT(false);
break;
}
os << _E(<);
return str;
}

Expand Down Expand Up @@ -1309,8 +1310,17 @@ AutoStr *Con_KnownWordToString(knownword_t const *word)
return textForKnownWord(word);
}

int Con_IterateKnownWords(char const* pattern, knownwordtype_t type,
int (*callback) (knownword_t const* word, void* parameters), void* parameters)
int Con_IterateKnownWords(char const *pattern, knownwordtype_t type,
int (*callback)(knownword_t const *word, void *parameters),
void *parameters)
{
return Con_IterateKnownWords(KnownWordStartsWith, pattern, type, callback, parameters);
}

int Con_IterateKnownWords(KnownWordMatchMode matchMode,
char const* pattern, knownwordtype_t type,
int (*callback)(knownword_t const* word, void* parameters),
void* parameters)
{
DENG_ASSERT(inited && callback);

Expand All @@ -1327,11 +1337,17 @@ int Con_IterateKnownWords(char const* pattern, knownwordtype_t type,

if(patternLength)
{
int compareResult;
AutoStr* textString = textForKnownWord(word);
compareResult = strnicmp(Str_Text(textString), pattern, patternLength);

if(compareResult) continue; // Didn't match.
if(matchMode == KnownWordStartsWith)
{
if(strnicmp(Str_Text(textString), pattern, patternLength))
continue; // Didn't match.
}
else if(matchMode == KnownWordExactMatch)
{
if(strcasecmp(Str_Text(textString), pattern))
continue; // Didn't match.
}
}

result = callback(word, parameters);
Expand Down Expand Up @@ -1582,11 +1598,11 @@ de::String Con_CmdAsStyledText(ccmd_t *cmd)
char const *str;
if((str = DH_GetString(DH_Find(cmd->name), HST_DESCRIPTION)))
{
return de::String(_E(b)) + cmd->name + " " _E(>) _E(2) + str;
return de::String(_E(b) "%1 " _E(>) _E(2) "%2" _E(.) _E(<)).arg(cmd->name).arg(str);
}
else
{
return de::String(_E(b)) + cmd->name;
return de::String(_E(b) "%1" _E(.)).arg(cmd->name);
}
}

Expand All @@ -1595,7 +1611,7 @@ de::String Con_AliasAsStyledText(calias_t *alias)
QString str;
QTextStream os(&str);

os << _E(b) << alias->name << _E(.) " == " _E(>) << alias->command;
os << _E(b) << alias->name << _E(.) " == " _E(>) << alias->command << _E(<);

return str;
}
Expand Down
13 changes: 10 additions & 3 deletions doomsday/client/src/con_main.cpp
Expand Up @@ -1349,11 +1349,17 @@ static int annotateMatchedWordCallback(knownword_t const *match, void *parameter
switch(match->type)
{
case WT_CVAR:
found = Con_VarAsStyledText((cvar_t *) match->data, "");
if(!(((cvar_t *)match->data)->flags & CVF_HIDE))
{
found = Con_VarAsStyledText((cvar_t *) match->data, "");
}
break;

case WT_CCMD:
found = Con_CmdAsStyledText((ccmd_t *) match->data);
if(!((ccmd_t *)match->data)->prevOverload)
{
found = Con_CmdAsStyledText((ccmd_t *) match->data);
}
break;

case WT_CALIAS:
Expand Down Expand Up @@ -1382,7 +1388,8 @@ de::String Con_AnnotatedConsoleTerms(QStringList terms)
de::String result;
foreach(QString term, terms)
{
Con_IterateKnownWords(term.toUtf8(), WT_ANY, annotateMatchedWordCallback, &result);
Con_IterateKnownWords(KnownWordExactMatch, term.toUtf8(), WT_ANY,
annotateMatchedWordCallback, &result);
}
return result;
}
Expand Down

0 comments on commit 77c6605

Please sign in to comment.