private IMatcher GetMatcher(int ws)
{
IMatcher matcher = null;
SetupSearchPattern(ws);
if (m_rbtnUseRegExp.Checked)
matcher = new RegExpMatcher(m_vwPattern);
else if (m_rbtnWholeItem.Checked)
{
// See whether we can use the MUCH more efficient ExactLiteralMatcher
if (!m_vwPattern.UseRegularExpressions
&& m_vwPattern.MatchDiacritics
&& m_vwPattern.MatchOldWritingSystem
&& m_vwPattern.Pattern.RunCount == 1)
{
string target = m_vwPattern.Pattern.Text;
int nVar;
int wsMatch = m_vwPattern.Pattern.get_Properties(0).GetIntPropValues((int) FwTextPropType.ktptWs,
out nVar);
if (m_vwPattern.MatchCase)
return new ExactLiteralMatcher(target, wsMatch);
return new ExactCaseInsensitiveLiteralMatcher(target, wsMatch);
}
matcher = new ExactMatcher(m_vwPattern);
}
else if (m_rbtnAtEnd.Checked)
matcher = new EndMatcher(m_vwPattern);
else if (m_rbtnAtStart.Checked)
matcher = new BeginMatcher(m_vwPattern);
else
matcher = new AnywhereMatcher(m_vwPattern);
if (!matcher.IsValid())
{
if (matcher is RegExpMatcher)
ShowRegExpMatcherError(matcher);
else
MessageBox.Show(this, matcher.ErrorMessage(), "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return matcher;
}