using System;
using System.Collections.Generic;
using System.Drawing;
using FastReport.Utils;
namespace FastReport
{
partial class TextObjectBase : ISearchable
{
#region ISearchable Members
///
public CharacterRange[] SearchText(string text, bool matchCase, bool wholeWord)
{
List ranges = new List();
string nonWordChars = " `-=[];',./~!@#$%^&*()+{}:\"<>?\\|\r\n\t";
int startIndex = 0;
while (startIndex < Text.Length)
{
int i = Text.IndexOf(text, startIndex, matchCase ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
if (i >= 0)
{
bool skip = false;
if (wholeWord)
{
if (i > 0 && nonWordChars.IndexOf(Text[i - 1]) == -1)
skip = true;
if (i + text.Length < Text.Length && nonWordChars.IndexOf(Text[i + text.Length]) == -1)
skip = true;
}
if (!skip)
ranges.Add(new CharacterRange(i, text.Length));
startIndex = i + text.Length;
}
else
break;
}
if (ranges.Count > 0)
return new CharacterRange[] { ranges[0] };
return null;
}
///
public virtual void DrawSearchHighlight(FRPaintEventArgs e, CharacterRange range)
{
RectangleF rangeRect = new RectangleF(AbsLeft * e.ScaleX, AbsTop * e.ScaleY,
Width * e.ScaleX, Height * e.ScaleY);
using (Brush brush = new SolidBrush(Color.FromArgb(128, SystemColors.Highlight)))
{
e.Graphics.FillRectangle(brush, rangeRect);
}
}
#endregion
}
}