コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: Range.cs プロジェクト: brunoemer/compiladores-c-ucs
        /// <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);
                }
            }
        }
コード例 #3
0
ファイル: ReplaceForm.cs プロジェクト: walney/ynoteclassic
        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);
        }
コード例 #4
0
 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);
     }
 }
コード例 #5
0
        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);
        }
コード例 #6
0
 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;
     }
 }
コード例 #7
0
ファイル: Range.cs プロジェクト: csuffyy/Sumerics
        /// <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);
                }
            }
        }
コード例 #8
0
        /// <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
        }