/// <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();
        }