ShaderTools.Hlsl.Parser.HlslLexer.LexDisabledText C# (CSharp) Method

LexDisabledText() private method

private LexDisabledText ( bool &followedByDirective ) : SyntaxNode
followedByDirective bool
return SyntaxNode
        private SyntaxNode LexDisabledText(out bool followedByDirective)
        {
            _start = _charReader.Position;

            int lastLineStart = _charReader.Position;
            bool allWhitespace = true;

            while (true)
            {
                char ch = _charReader.Current;
                switch (ch)
                {
                    case '\0':
                        followedByDirective = false;
                        return _charReader.Position - _start > 0 ? CreateDisabledText() : null;
                    case '#':
                        followedByDirective = true;
                        if (lastLineStart < _charReader.Position && !allWhitespace)
                            goto default;

                        _charReader.Reset(lastLineStart); // reset so directive parser can consume the starting whitespace on this line
                        return _charReader.Position - _start > 0 ? CreateDisabledText() : null;
                    case '\r':
                    case '\n':
                        ReadEndOfLine();
                        lastLineStart = _charReader.Position;
                        allWhitespace = true;
                        break;
                    default:
                        allWhitespace = allWhitespace && char.IsWhiteSpace(ch);
                        NextChar();
                        break;
                }
            }
        }