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;
}
}
}