Not adding to 0.3-branch yet in case it needs some tweaks.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2170 c06c8d41-db1a-0410-9941-cceddc491573
ZIFFVCQ72K35WGIUMZYN3KOXIUXF2CNXWKG6ZWEZ6LT3NSF3XOQAC
HXCUOTXRRUHNEBWC54HLSOKI5PGFQTAQU67ODHQ5HKG5FHIPOHFQC
ZHH4MGCGXMAKIZ4GVA6Q4MS3IWJTGNMWLPSAG2MWLQS2G3WU5YCAC
FYD4A5TIETIV2ZLFYWGHXANU6WQFKMVREHM7OZY2TAXSBMMCDLJAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
RC6L3CIBLJEH4GWRFD7UQNGI6PZT74FRUVOYHSAN2XCC74NZUASQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
7AMQN7MITMXBNVDAK5VOXTQ4TZIAOD6ZLOFJG7GQMBTY23Y2BKSAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
KR655YT3I3U5DMN5NS3FPUGMDNT4BI56K3SFF2FNJ77C45NFKL5AC
Y56C5OMUQ5XF2G6DKDV4R5MED44UOIUPTBBQVWQBUHYIXYA5MOZAC
I7QLYOTE6DLQZM7YWUWYLKHRJRB2A3STQ42ALSRGQICEWKD2QTEQC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
NXVPOFYKJFWQWKVPQUMWH2Y2KJEZX44BUOBFJ4JD4KFGPEGYHG4QC
65CM2EZCAFFBWLAYZ7ALBV3BQKNZCYOHYIFY46KU7BZL3LHV36JAC
RVST2QHYJ757ZHK4AUJ5NGPDZ44AD6RVFVXYPKQIBJXZBDNUCHXQC
R5Q2OJMXNVK5RPXIKLTHHAOP67XOBB44AZKKZ2TOI3USPL6HACXAC
WQU4ORZR2C52JNRTH5DN4XKNLEC4Q4SUZ7MLO6MBU6SSL2YXLSOAC
std::vector<std::string> database_find_keys(DBM *database,
const std::string ®ex,
bool ignore_case)
{
text_pattern tpat(regex, ignore_case);
std::vector<std::string> matches;
datum dbKey = dbm_firstkey(database);
while (dbKey.dptr != NULL)
{
std::string key((const char *)dbKey.dptr, dbKey.dsize);
if (tpat.matches(key))
matches.push_back(key);
dbKey = dbm_nextkey(database);
}
return (matches);
}
if (regex == "")
{
mpr("Description must contain at least one non-space.");
return;
}
// Try to get an exact match first.
std::string key = regex;
std::string desc = getLongDescription(key);
if (desc == "")
{
std::vector<std::string> matches = getLongDescriptionByRegex(regex);
if (matches.size() == 0)
{
mprf("Nothing matches '%s'", buf);
return;
}
else if (matches.size() > 1)
{
std::string prefix = "No exact match for '" +
regex + "', possible matches are: ";
// Use mpr_comma_separated_list() because the list
// might be *LONG*.
mpr_comma_separated_list(prefix, matches, " and ", ", ",
MSGCH_PLAIN);
return;
}
else
{
// Only one match, use that.
key = matches[0];
desc = getLongDescription(key);
}
}
key = uppercase_first(key);
key += "$$";
clrscr();
print_description(key + desc);
}