public bool Find(string pattern)
        {
            RegexOptions opt = cbMatchCase.Checked ? RegexOptions.None : RegexOptions.IgnoreCase;

            if (!cbRegex.Checked)
            {
                pattern = Regex.Escape(pattern);
            }
            if (cbWholeWord.Checked)
            {
                pattern = "\\b" + pattern + "\\b";
            }
            //
            Range range = tb.Selection.Clone();

            range.Normalize();
            //
            if (firstSearch)
            {
                startPlace  = range.Start;
                firstSearch = false;
            }
            //
            range.Start = range.End;
            if (range.Start >= startPlace)
            {
                range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1);
            }
            else
            {
                range.End = startPlace;
            }
            //
            foreach (var r in range.GetRangesByLines(pattern, opt))
            {
                tb.Selection.Start = r.Start;
                tb.Selection.End   = r.End;
                tb.DoSelectionVisible();
                tb.Invalidate();
                return(true);
            }
            if (range.Start >= startPlace && startPlace > Place.Empty)
            {
                tb.Selection.Start = new Place(0, 0);
                return(Find(pattern));
            }
            return(false);
        }
Example #2
0
        public bool Find(string pattern)
        {
            try
            {
                RegexOptions opt = cbMatchCase.Checked ? RegexOptions.None : RegexOptions.IgnoreCase;
                if (!cbRegex.Checked)
                {
                    pattern = Regex.Escape(pattern);
                }
                if (cbWholeWord.Checked)
                {
                    pattern = "\\b" + pattern + "\\b";
                }
                //
                Range range = tb.Selection.Clone();
                range.Normalize();

                //get count
                Range rangetmp = range.Clone();
                rangetmp.Start = new Place(0, 0);
                rangetmp.End   = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1);
                int total = rangetmp.GetRangesByLines(pattern, opt).Count();

                //
                if (firstSearch)
                {
                    startPlace  = range.Start;
                    firstSearch = false;
                }
                //
                range.Start = range.End;
                if (range.Start >= startPlace)
                {
                    range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1);
                }
                else
                {
                    range.End = startPlace;
                }
                //
                IEnumerable <Range> ranges = range.GetRangesByLines(pattern, opt);
                ShowFindInfo(total, total - ranges.Count());
                foreach (var r in ranges)
                {
                    tb.Selection = r;
                    tb.DoSelectionVisible();
                    tb.Invalidate();
                    return(true);
                }
                //
                if (range.Start >= startPlace && startPlace > Place.Empty)
                {
                    tb.Selection.Start = new Place(0, 0);
                    Find(pattern);
                    return(true);
                }
                tb.Selection.Start = new Place(0, 0);
                //this.Title = "Not found";
            }
            catch (Exception ex)
            {
                //this.Title = ex.Message;
            }

            return(true);
        }
Example #3
0
 /// <summary>
 /// Expands range from first char of Start line to last char of End line
 /// </summary>
 public void Expand()
 {
     Normalize();
     start = new Place(0, start.iLine);
     end   = new Place(tb.GetLineLength(end.iLine), end.iLine);
 }
Example #4
0
        public virtual void FindNext(string pattern)
        {
            try
            {
                RegexOptions opt = cbMatchCase.Checked ? RegexOptions.None : RegexOptions.IgnoreCase;
                if (!cbRegex.Checked)
                {
                    pattern = Regex.Escape(pattern);
                }
                if (cbWholeWord.Checked)
                {
                    pattern = "\\b" + pattern + "\\b";
                }
                //
                Range range = tb.Selection.Clone();
                range.Normalize();
                //
                if (firstSearch)
                {
                    startPlace  = range.Start;
                    firstSearch = false;
                }
                //
                range.Start = range.End;
                if (range.Start >= startPlace)
                {
                    range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1);
                }
                else
                {
                    range.End = startPlace;
                }

                //
                foreach (var r in range.GetRangesByLines(pattern, opt))
                {
                    if (r.Start == r.End)
                    {
                        MessageBox.Show("찾는 문자열이 빈 문자열입니다.");
                        return;
                    }

                    tb.Selection = r;
                    tb.DoSelectionVisible();
                    tb.Invalidate();
                    return;
                }
                //
                if (range.Start >= startPlace && startPlace > Place.Empty)
                {
                    tb.Selection.Start = new Place(0, 0);
                    FindNext(pattern);
                    return;
                }
                MessageBox.Show("찾을 수 없습니다.");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }