private Range GetFragment(string searchPattern)
{
var tb = TargetControlWrapper;
if (tb.SelectionLength > 0) return new Range(tb);
var text = tb.Text;
var regex = new Regex(searchPattern);
var result = new Range(tb);
var startPos = tb.SelectionStart;
//go forward
var i = startPos;
while (i >= 0 && i < text.Length)
{
if (!regex.IsMatch(text[i].ToString()))
break;
i++;
}
result.End = i;
//go backward
i = startPos;
while (i > 0 && (i - 1) < text.Length)
{
if (!regex.IsMatch(text[i - 1].ToString()))
break;
i--;
}
result.Start = i;
return result;
}