LibYAML-FFI
view release on metacpan or search on metacpan
ffi/scanner.c view on Meta::CPAN
/* A simple key cannot follow a flow scalar. */
parser->simple_key_allowed = 0;
/* Create the SCALAR token and append it to the queue. */
if (!yaml_parser_scan_flow_scalar(parser, &token, single))
return 0;
if (!ENQUEUE(parser, parser->tokens, token)) {
yaml_token_delete(&token);
return 0;
}
return 1;
}
/*
* Produce the SCALAR(...,plain) token.
*/
static int
yaml_parser_fetch_plain_scalar(yaml_parser_t *parser)
{
yaml_token_t token;
/* A plain scalar could be a simple key. */
if (!yaml_parser_save_simple_key(parser))
return 0;
/* A simple key cannot follow a flow scalar. */
parser->simple_key_allowed = 0;
/* Create the SCALAR token and append it to the queue. */
if (!yaml_parser_scan_plain_scalar(parser, &token))
return 0;
if (!ENQUEUE(parser, parser->tokens, token)) {
yaml_token_delete(&token);
return 0;
}
return 1;
}
/*
* Eat whitespaces and comments until the next token is found.
*/
static int
yaml_parser_scan_to_next_token(yaml_parser_t *parser)
{
/* Until the next token is not found. */
while (1)
{
/* Allow the BOM mark to start a line. */
if (!CACHE(parser, 1)) return 0;
if (parser->mark.column == 0 && IS_BOM(parser->buffer))
SKIP(parser);
/*
* Eat whitespaces.
*
* Tabs are allowed:
*
* - in the flow context;
* - in the block context, but not at the beginning of the line or
* after '-', '?', or ':' (complex value).
*/
if (!CACHE(parser, 1)) return 0;
while (CHECK(parser->buffer,' ') ||
((parser->flow_level || !parser->simple_key_allowed) &&
CHECK(parser->buffer, '\t'))) {
SKIP(parser);
if (!CACHE(parser, 1)) return 0;
}
/* Eat a comment until a line break. */
if (CHECK(parser->buffer, '#')) {
while (!IS_BREAKZ(parser->buffer)) {
SKIP(parser);
if (!CACHE(parser, 1)) return 0;
}
}
/* If it is a line break, eat it. */
if (IS_BREAK(parser->buffer))
{
if (!CACHE(parser, 2)) return 0;
SKIP_LINE(parser);
/* In the block context, a new line may start a simple key. */
if (!parser->flow_level) {
parser->simple_key_allowed = 1;
}
}
else
{
/* We have found a token. */
break;
}
}
return 1;
}
/*
* Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.
*
* Scope:
* %YAML 1.1 # a comment \n
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
( run in 2.263 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )