1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-23 01:44:22 +00:00

Wildcard matching fix for strings containing "*".

This commit is contained in:
jules 2011-09-30 09:44:18 +01:00
parent 9b38f91226
commit 4b59682077

View file

@ -991,34 +991,30 @@ struct WildCardMatcher
for (;;)
{
const juce_wchar wc = wildcard.getAndAdvance();
const juce_wchar tc = *test;
if (wc == tc
|| (ignoreCase && CharacterFunctions::toLowerCase (wc) == CharacterFunctions::toLowerCase (tc))
|| (wc == '?' && tc != 0))
{
if (wc == 0)
return true;
if (wc == '*')
return wildcard.isEmpty() || matchesAnywhere (wildcard, test, ignoreCase);
++test;
}
else
{
return wc == '*' && (wildcard.isEmpty() || matchesAnywhere (wildcard, test, ignoreCase));
}
if (! characterMatches (wc, test.getAndAdvance(), ignoreCase))
return false;
if (wc == 0)
return true;
}
}
static bool characterMatches (const juce_wchar wc, const juce_wchar tc, const bool ignoreCase) noexcept
{
return (wc == tc) || (wc == '?' && tc != 0)
|| (ignoreCase && CharacterFunctions::toLowerCase (wc) == CharacterFunctions::toLowerCase (tc));
}
static bool matchesAnywhere (const CharPointer& wildcard, CharPointer test, const bool ignoreCase) noexcept
{
while (! test.isEmpty())
{
for (; ! test.isEmpty(); ++test)
if (matches (wildcard, test, ignoreCase))
return true;
++test;
}
return false;
}
};
@ -2305,6 +2301,15 @@ public:
expect (s5.matchesWildcard (L"*word3", true));
expect (s5.matchesWildcard ("*word?", true));
expect (s5.matchesWildcard (L"Word*3", true));
expect (! s5.matchesWildcard (L"*34", true));
expect (String ("xx**y").matchesWildcard ("*y", true));
expect (String ("xx**y").matchesWildcard ("x*y", true));
expect (String ("xx**y").matchesWildcard ("xx*y", true));
expect (String ("xx**y").matchesWildcard ("xx*", true));
expect (String ("xx?y").matchesWildcard ("x??y", true));
expect (String ("xx?y").matchesWildcard ("xx?y", true));
expect (! String ("xx?y").matchesWildcard ("xx?y?", true));
expect (String ("xx?y").matchesWildcard ("xx??", true));
expectEquals (s5.fromFirstOccurrenceOf (String::empty, true, false), s5);
expectEquals (s5.fromFirstOccurrenceOf ("xword2", true, false), s5.substring (100));