List <Range> FindAll() { string pattern = tbFind.Text; RegexOptions opt = cbMatchCase.Checked ? RegexOptions.None : RegexOptions.IgnoreCase; if (!cbRegex.Checked) { pattern = Regex.Replace(pattern, FastColoredTextBoxNS.FindForm.RegexSpecSymbolsPattern, "\\$0"); } if (cbWholeWord.Checked) { pattern = "\\b" + pattern + "\\b"; } // Range range = tb.Selection.Clone(); range.Normalize(); range.Start = range.End; range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1); // List <Range> list = new List <Range>(); foreach (var r in range.GetRanges(pattern, opt)) { list.Add(r); } return(list); }
/// <summary> /// Finds ranges for given regex pattern. /// Search is separately in each line. /// This method requires less memory than GetRanges(). /// </summary> /// <param name="regexPattern">Regex pattern</param> /// <returns>Enumeration of ranges</returns> public IEnumerable <Range> GetRangesByLines(string regexPattern, RegexOptions options) { Normalize(); //create regex Regex regex = new Regex(regexPattern, options); // var fts = tb.TextSource as FileTextSource;//<----!!!! ugly //enumaerate lines for (int iLine = Start.iLine; iLine <= End.iLine; iLine++) { // bool isLineLoaded = fts != null?fts.IsLineLoaded(iLine) : true; // var r = new Range(tb, new Place(0, iLine), new Place(tb[iLine].Count, iLine)); if (iLine == Start.iLine || iLine == End.iLine) { r = r.GetIntersectionWith(this); } foreach (var foundRange in r.GetRanges(regex)) { yield return(foundRange); } if (!isLineLoaded) { fts.UnloadLine(iLine); } } }
public List <Range> FindAll(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(); range.Start = range.End; range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1); // List <Range> list = new List <Range>(); foreach (var r in range.GetRanges(pattern, opt)) { list.Add(r); } return(list); }
private void FindNext() { try { string pattern = tbFind.Text; RegexOptions opt = cbMatchCase.Checked ? RegexOptions.None : RegexOptions.IgnoreCase; if (!cbRegex.Checked) { pattern = Regex.Replace(pattern, RegexSpecSymbolsPattern, "\\$0"); } 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.GetRanges(pattern, opt)) { tb.Selection = r; tb.DoSelectionVisible(); tb.Invalidate(); return; } // if (range.Start >= startPlace && startPlace > Place.Empty) { tb.Selection.Start = new Place(0, 0); FindNext(); return; } MessageBox.Show("Not found"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
bool Find() { string pattern = tbFind.Text; RegexOptions opt = cbMatchCase.Checked ? RegexOptions.None : RegexOptions.IgnoreCase; if (!cbRegex.Checked) { pattern = Regex.Replace(pattern, FastColoredTextBoxNS.FindForm.RegexSpecSymbolsPattern, "\\$0"); } 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.GetRanges(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()); } return(false); }
private void tbFind_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r' && CurrentTB != null) { FastColoredTextBoxNS.Range r = tbFindChanged?CurrentTB.Range.Clone():CurrentTB.Selection.Clone(); tbFindChanged = false; r.End = new Place(CurrentTB[CurrentTB.LinesCount - 1].Count, CurrentTB.LinesCount - 1); var pattern = Regex.Escape(tbFind.Text); foreach (var found in r.GetRanges(pattern)) { found.Inverse(); CurrentTB.Selection = found; CurrentTB.DoSelectionVisible(); return; } MessageBox.Show("Not found."); } else { tbFindChanged = true; } }
/// <summary> /// Finds ranges for given regex pattern. /// Search is separately in each line. /// This method requires less memory than GetRanges(). /// </summary> /// <param name="regexPattern">Regex pattern</param> /// <returns>Enumeration of ranges</returns> public IEnumerable <Range> GetRangesByLines(string regexPattern, RegexOptions options) { Normalize(); //create regex Regex regex = new Regex(regexPattern, options); //enumaerate lines for (int iLine = Start.iLine; iLine <= End.iLine; iLine++) { var r = new Range(tb, new Place(0, iLine), new Place(tb[iLine].Count, iLine)); if (iLine == Start.iLine || iLine == End.iLine) { r = r.GetIntersectionWith(this); } foreach (var foundRange in r.GetRanges(regex)) { yield return(foundRange); } } }
/// <summary> /// Highlights C# code /// </summary> /// <param name="range"></param> public virtual void CSharpSyntaxHighlight(Range range) { range.tb.CommentPrefix = "//"; range.tb.LeftBracket = '('; range.tb.RightBracket = ')'; range.tb.LeftBracket2 = '\x0'; range.tb.RightBracket2 = '\x0'; //clear style of changed range range.ClearStyle(StringStyle, CommentStyle, NumberStyle, AttributeStyle, ClassNameStyle, KeywordStyle); // if (CSharpStringRegex == null) { InitCShaprRegex(); } //string highlighting range.SetStyle(StringStyle, CSharpStringRegex); //comment highlighting range.SetStyle(CommentStyle, CSharpCommentRegex1); range.SetStyle(CommentStyle, CSharpCommentRegex2); range.SetStyle(CommentStyle, CSharpCommentRegex3); //number highlighting range.SetStyle(NumberStyle, CSharpNumberRegex); //attribute highlighting range.SetStyle(AttributeStyle, CSharpAttributeRegex); //class name highlighting range.SetStyle(ClassNameStyle, CSharpClassNameRegex); //keyword highlighting range.SetStyle(KeywordStyle, CSharpKeywordRegex); //find document comments foreach (var r in range.GetRanges(@"^\s*///.*$", RegexOptions.Multiline)) { //remove C# highlighting from this fragment r.ClearStyle(StyleIndex.All); //do XML highlighting if (HTMLTagRegex == null) { InitHTMLRegex(); } // r.SetStyle(CommentStyle); //tags foreach (var rr in r.GetRanges(HTMLTagContentRegex)) { rr.ClearStyle(StyleIndex.All); rr.SetStyle(CommentTagStyle); } //prefix '///' foreach (var rr in r.GetRanges(@"^\s*///", RegexOptions.Multiline)) { rr.ClearStyle(StyleIndex.All); rr.SetStyle(CommentTagStyle); } } //clear folding markers range.ClearFoldingMarkers(); //set folding markers range.SetFoldingMarkers("{", "}"); //allow to collapse brackets block range.SetFoldingMarkers(@"#region\b", @"#endregion\b"); //allow to collapse #region blocks range.SetFoldingMarkers(@"/\*", @"\*/"); //allow to collapse comment block }