private void FetchKey()
{
// In the block context, additional checks are required.
if (flowLevel == 0)
{
// Check if we are allowed to start a new key (not nessesary simple).
if (!simpleKeyAllowed)
{
var mark = cursor.Mark();
throw new SyntaxErrorException(mark, mark, "Mapping keys are not allowed in this context.");
}
// Add the BLOCK-MAPPING-START token if needed.
RollIndent(cursor.LineOffset, -1, false, cursor.Mark());
}
// Reset any potential simple keys on the current flow level.
RemoveSimpleKey();
// Simple keys are allowed after '?' in the block context.
simpleKeyAllowed = flowLevel == 0;
// Consume the token.
var start = cursor.Mark();
Skip();
// Create the KEY token and append it to the queue.
tokens.Enqueue(new Key(start, cursor.Mark()));
}