Example #1
0
        public void SearchFindNext(string sTextPtn, bool searchUseRegex)
        {
            //AzukiのAnnの検索処理を利用

            Sgry.Azuki.Document azdoc = azukiControl.Document;
            int         startIndex;
            TextSegment result;
            Regex       regex;

            int s, e;

            azdoc.GetSelection(out s, out e);
            searchAnchorIndex = e + 1;

            // determine where to start text search
            if (0 <= searchAnchorIndex)
            {
                startIndex = searchAnchorIndex;
            }
            else
            {
                startIndex = Math.Max(azdoc.CaretIndex, azdoc.AnchorIndex);
            }

            // find
            if (searchUseRegex)
            {
                // Regular expression search.
                // get regex object from context
                regex = searchRegex;
                if (regex == null)
                {
                    // current text pattern was invalid as a regular expression.
                    return;
                }

                // ensure that "RightToLeft" option of the regex object is NOT set
                RegexOptions opt = regex.Options;
                if ((opt & RegexOptions.RightToLeft) != 0)
                {
                    opt        &= ~(RegexOptions.RightToLeft);
                    regex       = new Regex(regex.ToString(), opt);
                    searchRegex = regex;
                }
                result = azdoc.FindNext(regex, startIndex, azdoc.Length);
            }
            else
            {
                // normal text pattern matching.
                if (startIndex < azdoc.Length)
                {
                    result = azdoc.FindNext(sTextPtn, startIndex, azdoc.Length, searchMatchCase);
                }
                else
                {
                    result = null;
                }
            }

            // select the result
            if (result != null)
            {
                azukiControl.Document.SetSelection(result.Begin, result.End);
                azukiControl.View.SetDesiredColumn();
                azukiControl.ScrollToCaret();
                searchAnchorIndex = result.End;
            }
            else
            {
                MessageBox.Show("見つかりません");
            }
        }
Example #2
0
        public bool SearchFindNext(string sTextPtn, bool searchUseRegex)
        {
            //AzukiのAnnの検索処理を利用

            Sgry.Azuki.Document azdoc = ac.Document;
            int   startIndex;
            Regex regex;

            if (searchAnchorIndex == -1)
            {
                searchAnchorIndex = select.Begin;
            }
            else
            {
                ac.GetSelection(out int st, out int ed);
                searchAnchorIndex = ed;
            }

            // determine where to start text search
            if (0 <= searchAnchorIndex)
            {
                startIndex = searchAnchorIndex;
            }
            else
            {
                startIndex = Math.Max(azdoc.CaretIndex, azdoc.AnchorIndex);
            }

            // find
            if (searchUseRegex)
            {
                // Regular expression search.
                // get regex object from context
                regex = searchRegex;
                if (regex == null)
                {
                    return(false);
                }

                // ensure that "RightToLeft" option of the regex object is NOT set
                RegexOptions opt = regex.Options;
                if ((opt & RegexOptions.RightToLeft) != 0)
                {
                    opt        &= ~(RegexOptions.RightToLeft);
                    regex       = new Regex(regex.ToString(), opt);
                    searchRegex = regex;
                }
                result = azdoc.FindNext(regex, startIndex, azdoc.Length);
            }
            else
            {
                // normal text pattern matching.
                if (startIndex < azdoc.Length)
                {
                    result = azdoc.FindNext(sTextPtn, startIndex, azdoc.Length, searchMatchCase);
                }
                else
                {
                    result = null;
                }
            }

            // select the result
            if (result == null)
            {
                return(false);
            }
            if (select.Begin != select.End && result.Begin > select.End)
            {
                return(false);
            }

            ac.Document.SetSelection(result.Begin, result.End);
            ac.View.SetDesiredColumn();
            ac.ScrollToCaret();
            searchAnchorIndex = result.End;

            return(true);
        }