LibYAML-FFI
view release on metacpan or search on metacpan
ffi/emitter.c view on Meta::CPAN
return 0;
}
return 1;
default:
return 1;
}
}
/*
* Write the BOM character.
*/
static int
yaml_emitter_write_bom(yaml_emitter_t *emitter)
{
if (!FLUSH(emitter)) return 0;
*(emitter->buffer.pointer++) = (yaml_char_t) '\xEF';
*(emitter->buffer.pointer++) = (yaml_char_t) '\xBB';
*(emitter->buffer.pointer++) = (yaml_char_t) '\xBF';
ffi/emitter.c view on Meta::CPAN
int spaces = 0;
STRING_ASSIGN(string, value, length);
if (!yaml_emitter_write_indicator(emitter, "\"", 1, 0, 0))
return 0;
while (string.pointer != string.end)
{
if (!IS_PRINTABLE(string) || (!emitter->unicode && !IS_ASCII(string))
|| IS_BOM(string) || IS_BREAK(string)
|| CHECK(string, '"') || CHECK(string, '\\'))
{
unsigned char octet;
unsigned int width;
unsigned int value;
int k;
octet = string.pointer[0];
width = (octet & 0x80) == 0x00 ? 1 :
(octet & 0xE0) == 0xC0 ? 2 :
ffi/reader.c view on Meta::CPAN
parser->problem_offset = offset;
parser->problem_value = value;
return 0;
}
/*
* Byte order marks.
*/
#define BOM_UTF8 "\xef\xbb\xbf"
#define BOM_UTF16LE "\xff\xfe"
#define BOM_UTF16BE "\xfe\xff"
/*
* Determine the input stream encoding by checking the BOM symbol. If no BOM is
* found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.
*/
static int
yaml_parser_determine_encoding(yaml_parser_t *parser)
{
/* Ensure that we had enough bytes in the raw buffer. */
while (!parser->eof
&& parser->raw_buffer.last - parser->raw_buffer.pointer < 3) {
if (!yaml_parser_update_raw_buffer(parser)) {
return 0;
}
}
/* Determine the encoding. */
if (parser->raw_buffer.last - parser->raw_buffer.pointer >= 2
&& !memcmp(parser->raw_buffer.pointer, BOM_UTF16LE, 2)) {
parser->encoding = YAML_UTF16LE_ENCODING;
parser->raw_buffer.pointer += 2;
parser->offset += 2;
}
else if (parser->raw_buffer.last - parser->raw_buffer.pointer >= 2
&& !memcmp(parser->raw_buffer.pointer, BOM_UTF16BE, 2)) {
parser->encoding = YAML_UTF16BE_ENCODING;
parser->raw_buffer.pointer += 2;
parser->offset += 2;
}
else if (parser->raw_buffer.last - parser->raw_buffer.pointer >= 3
&& !memcmp(parser->raw_buffer.pointer, BOM_UTF8, 3)) {
parser->encoding = YAML_UTF8_ENCODING;
parser->raw_buffer.pointer += 3;
parser->offset += 3;
}
else {
parser->encoding = YAML_UTF8_ENCODING;
}
return 1;
}
ffi/scanner.c view on Meta::CPAN
* 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).
/** The tag prefix. */
yaml_char_t *prefix;
} yaml_tag_directive_t;
/** The stream encoding. */
typedef enum yaml_encoding_e {
/** Let the parser choose the encoding. */
YAML_ANY_ENCODING,
/** The default UTF-8 encoding. */
YAML_UTF8_ENCODING,
/** The UTF-16-LE encoding with BOM. */
YAML_UTF16LE_ENCODING,
/** The UTF-16-BE encoding with BOM. */
YAML_UTF16BE_ENCODING
} yaml_encoding_t;
/** Line break types. */
typedef enum yaml_break_e {
/** Let the parser choose the break type. */
YAML_ANY_BREAK,
/** Use CR for line breaks (Mac style). */
YAML_CR_BREAK,
ffi/yaml_private.h view on Meta::CPAN
/*
* Check if the character at the specified position is NUL.
*/
#define IS_Z_AT(string,offset) CHECK_AT((string),'\0',(offset))
#define IS_Z(string) IS_Z_AT((string),0)
/*
* Check if the character at the specified position is BOM.
*/
#define IS_BOM_AT(string,offset) \
(CHECK_AT((string),'\xEF',(offset)) \
&& CHECK_AT((string),'\xBB',(offset)+1) \
&& CHECK_AT((string),'\xBF',(offset)+2)) /* BOM (#xFEFF) */
#define IS_BOM(string) IS_BOM_AT(string,0)
/*
* Check if the character at the specified position is space.
*/
#define IS_SPACE_AT(string,offset) CHECK_AT((string),' ',(offset))
#define IS_SPACE(string) IS_SPACE_AT((string),0)
/*
( run in 1.636 second using v1.01-cache-2.11-cpan-e9daa2b36ef )