code: func yaml_parser_fetch_key(parser *yaml_parser_t) bool {
  
  	// In the block context, additional checks are required.
  	if parser.flow_level == 0 {
  		// Check if we are allowed to start a new key (not nessesary simple).
  		if !parser.simple_key_allowed {
  			return yaml_parser_set_scanner_error(parser, "", parser.mark,
  				"mapping keys are not allowed in this context")
  		}
  		// Add the BLOCK-MAPPING-START token if needed.
  		if !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {
  			return false
  		}
  	}
  
  	// Reset any potential simple keys on the current flow level.
  	if !yaml_parser_remove_simple_key(parser) {
  		return false
  	}
  
  	// Simple keys are allowed after '?' in the block context.
  	parser.simple_key_allowed = parser.flow_level == 0
  
  	// Consume the token.
  	start_mark := parser.mark
  	skip(parser)
  	end_mark := parser.mark
  
  	// Create the KEY token and append it to the queue.
  	token := yaml_token_t{
  		typ:        yaml_KEY_TOKEN,
  		start_mark: start_mark,
  		end_mark:   end_mark,
  	}
  	yaml_insert_token(parser, -1, &token)
  	return true
  }
docs: // Produce the KEY token.