System.Text.RegularExpressions.RegexInterpreter.FindFirstChar C# (CSharp) Method

FindFirstChar() protected method

protected FindFirstChar ( ) : bool
return bool
        protected override bool FindFirstChar()
        {
            int i;
            string set;

            if (0 != (_code._anchors & (RegexFCD.Beginning | RegexFCD.Start | RegexFCD.EndZ | RegexFCD.End)))
            {
                if (!_code._rightToLeft)
                {
                    if ((0 != (_code._anchors & RegexFCD.Beginning) && runtextpos > runtextbeg) ||
                        (0 != (_code._anchors & RegexFCD.Start) && runtextpos > runtextstart))
                    {
                        runtextpos = runtextend;
                        return false;
                    }
                    if (0 != (_code._anchors & RegexFCD.EndZ) && runtextpos < runtextend - 1)
                    {
                        runtextpos = runtextend - 1;
                    }
                    else if (0 != (_code._anchors & RegexFCD.End) && runtextpos < runtextend)
                    {
                        runtextpos = runtextend;
                    }
                }
                else
                {
                    if ((0 != (_code._anchors & RegexFCD.End) && runtextpos < runtextend) ||
                        (0 != (_code._anchors & RegexFCD.EndZ) && (runtextpos < runtextend - 1 ||
                                                               (runtextpos == runtextend - 1 && CharAt(runtextpos) != '\n'))) ||
                        (0 != (_code._anchors & RegexFCD.Start) && runtextpos < runtextstart))
                    {
                        runtextpos = runtextbeg;
                        return false;
                    }
                    if (0 != (_code._anchors & RegexFCD.Beginning) && runtextpos > runtextbeg)
                    {
                        runtextpos = runtextbeg;
                    }
                }

                if (_code._bmPrefix != null)
                {
                    return _code._bmPrefix.IsMatch(runtext, runtextpos, runtextbeg, runtextend);
                }

                return true; // found a valid start or end anchor
            }
            else if (_code._bmPrefix != null)
            {
                runtextpos = _code._bmPrefix.Scan(runtext, runtextpos, runtextbeg, runtextend);

                if (runtextpos == -1)
                {
                    runtextpos = (_code._rightToLeft ? runtextbeg : runtextend);
                    return false;
                }

                return true;
            }
            else if (_code._fcPrefix == null)
            {
                return true;
            }

            _rightToLeft = _code._rightToLeft;
            _caseInsensitive = _code._fcPrefix.CaseInsensitive;
            set = _code._fcPrefix.Prefix;

            if (RegexCharClass.IsSingleton(set))
            {
                char ch = RegexCharClass.SingletonChar(set);

                for (i = Forwardchars(); i > 0; i--)
                {
                    if (ch == Forwardcharnext())
                    {
                        Backwardnext();
                        return true;
                    }
                }
            }
            else
            {
                for (i = Forwardchars(); i > 0; i--)
                {
                    if (RegexCharClass.CharInClass(Forwardcharnext(), set))
                    {
                        Backwardnext();
                        return true;
                    }
                }
            }
            return false;
        }