1. На
AngelScript2. string. Но с ним этот трюк не прокатит - key специально приводится к нижнему регистру, для регистронезависимого поиска.
Для твоих целей надо проверять item.d.descr.
3. Строковый тип в AngelScript не является встроенным, и реализуется приложением-хостом.
Для того, чтобы посмотреть API, которое snegopat.dll регистрирует в движке AngelScript, можно воспользоваться
этим и
этим.
Небольшое замечание для строкового типа - методы, модифицирующие строку (например, toLower, trim, replace и т.п.) - модифицируют исходную строку и возвращают ссылку на неё же, для возможности написания цепочек преобразований, в отличии от многих других языков, где такие операции каждый раз создают копию строки.
Хинт - для твоих целей - вычленение заглавных букв из строки - можно воспользоваться регулярным выражением:
Код:
RegExp upCase("\\p{Upper}");
Единственный косяк - оказывается, у меня метод string::makeUpper не работает
Сегодня днём доделаю.
Вобщем, примерно так пока получится:
Код:
bool compareUpperCases(string test, const string& pattern, RegExp& reUpper)
{
auto res = reUpper.match(test);
test.makeLower();
if (res.matches < pattern.length)
return false;
for (uint i = 0; i < pattern.length; i++) {
if (test[res.begin(i, 0)] != pattern[i])
return false;
}
return true;
}
...
array<SmartBoxItem&&>&& filter()
{
................
} else {
StringComparator cmp;
RegExp re("\\p{Upper}");
string patternUpper = buffer.substr(0, posInBuffer).makeLower();
................
if (!item.d.exclude && (cmp.match(item.d.key) || compareUpperCases(item.d.descr, patternUpper, re)))
result.insertLast(item);