public Token ReadNextToken()
{
if(position == input.Length)
{
return null;
}
if(state != TokenizerState.PositionalValues && input[position] == EscapeMarker)
{
ReadNextString();
state = TokenizerState.PositionalValues;
}
if(state == TokenizerState.PositionalValues)
{
return new PositionalArgumentToken(ReadNextString(), GetCurrentPosition());
}
var location = GetCurrentPosition();
var c = ReadChar();
if(state == TokenizerState.ShortName)
{
if(c == Tokenizer.EndOfString)
{
state = TokenizerState.Normal;
return ReadNextToken();
}
return new ShortNameToken(c, location);
}
if(c == FlagCharacter)
{
var f = PeekChar();
if(f == FlagCharacter)
{
// we already peeked it, so just move to the next char
ReadChar();
return new LongNameToken(ReadUntilChar(Tokenizer.EndOfString, AssignmentOperator), location);
}
state = TokenizerState.ShortName;
return ReadNextToken();
}
else
{
var value = ReadNextString();
return (value == null) ? null : new PositionalArgumentToken(value, location);
}
}