/// <summary> /// Get fragment of text around Start place. Returns maximal mathed to pattern fragment. /// </summary> /// <param name="allowedSymbolsPattern">Allowed chars pattern for fragment</param> /// <returns>Range of found fragment</returns> public Range GetFragment(string allowedSymbolsPattern, RegexOptions options) { Range r = new Range(tb); r.Start = Start; Regex regex = new Regex(allowedSymbolsPattern, options); //go left, check symbols while (r.GoLeftThroughFolded()) { if (!regex.IsMatch(r.CharAfterStart.ToString())) { r.GoRightThroughFolded(); break; } } Place startFragment = r.Start; r.Start = Start; //go right, check symbols do { if (!regex.IsMatch(r.CharAfterStart.ToString())) { break; } } while (r.GoRightThroughFolded()); Place endFragment = r.Start; return(new Range(tb, startFragment, endFragment)); }
void GoLeftBracket(FastColoredTextBox tb, char leftBracket, char rightBracket) { FastColoredTextBoxNS.Range range = tb.Selection.Clone();//need to clone because we will move caret int counter = 0; int maxIterations = maxBracketSearchIterations; while (range.GoLeftThroughFolded())//move caret left { if (range.CharAfterStart == leftBracket) { counter++; } if (range.CharAfterStart == rightBracket) { counter--; } if (counter == 1) { //found tb.Selection.Start = range.Start; tb.DoSelectionVisible(); break; } // maxIterations--; if (maxIterations <= 0) { break; } } tb.Invalidate(); }