21 syck_assert(
const char *file_name,
unsigned line_num,
const char *expr )
24 fprintf( stderr,
"\nAssertion failed: %s, line %u: %s\n",
25 file_name, line_num, expr );
53 len = fread(
buf + skip,
sizeof(
char ), max_size, file->
ptr );
74 if ( max_size <= 0 ) max_size = 0;
75 else str->
ptr += max_size;
85 while ( str->
ptr < str->
end ) {
86 if (*(str->
ptr++) ==
'\n')
break;
103 while (
p->lvl_idx > 1 )
108 if (
p->lvl_idx < 1 )
111 p->levels[0].spaces = -1;
112 p->levels[0].ncount = 0;
121 if (
p->buffer ==
NULL )
137 p->root_on_error = 0;
150 p->root_on_error = roer;
169 p->bad_anchors =
NULL;
170 p->implicit_typing = 1;
171 p->taguri_expansion = 0;
183 if (
p->syms ==
NULL )
187 id =
p->syms->num_entries + 1;
197 if (
p->syms ==
NULL )
return 0;
199 if(ret) *datap = (
void *)
data;
217 if (
p->anchors !=
NULL )
224 if (
p->bad_anchors !=
NULL )
228 p->bad_anchors =
NULL;
254 if (
p->syms !=
NULL )
269 if (
p->buffer !=
NULL )
287 p->implicit_typing = ( flag == 0 ? 0 : 1 );
293 p->taguri_expansion = ( flag == 0 ? 0 : 1 );
300 p->error_handler = hdlr;
307 p->bad_anchor_handler = hdlr;
314 p->input_type = input_type;
325 p->io.file->ptr = fp;
328 p->io.file->read = read;
344 p->io.str->beg = ptr;
345 p->io.str->ptr = ptr;
346 p->io.str->end = ptr +
len;
349 p->io.str->read = read;
366 return &
p->levels[
p->lvl_idx-1];
375 if (
p->lvl_idx <= 1 )
return;
378 free(
p->levels[
p->lvl_idx].domain );
385 if (
p->lvl_idx + 1 >
p->lvl_capa )
392 p->levels[
p->lvl_idx].spaces =
len;
393 p->levels[
p->lvl_idx].ncount = 0;
394 p->levels[
p->lvl_idx].domain =
syck_strndup(
p->levels[
p->lvl_idx-1].domain,
strlen(
p->levels[
p->lvl_idx-1].domain ) );
395 p->levels[
p->lvl_idx].status = status;
403 switch (
p->io_type )
406 if (
p->io.str !=
NULL )
414 if (
p->io.file !=
NULL )
429 if (
p->token ==
NULL )
432 skip =
p->limit -
p->token;
433 if ( (
count =
p->token -
p->buffer ) )
437 p->token =
p->buffer;
451 if (
p->cursor ==
NULL )
453 p->cursor =
p->buffer;
454 p->lineptr =
p->buffer;
455 p->linectptr =
p->buffer;
456 p->marker =
p->buffer;
458 p->limit =
p->buffer +
len;
467 switch (
p->io_type )
489 switch (
p->io_type )
493 len = (
p->io.str->read)(
p->buffer,
p->io.str, max_size, skip );
498 len = (
p->io.file->read)(
p->buffer,
p->io.file, max_size, skip );
519 printf(
"Error at [Line %d, Col %"PRIdPTRDIFF"]: %s\n",
521 p->cursor -
p->lineptr,
void syck_parser_taguri_expansion(SyckParser *p, int flag)
void syck_assert(const char *file_name, unsigned line_num, const char *expr)
void(* SyckErrorHandler)(SyckParser *, const char *)
size_t strlen(const char *)
#define S_ALLOC_N(type, n)
void syck_parser_error_handler(SyckParser *p, SyckErrorHandler hdlr)
SYMID syck_parse(SyckParser *p)
int syck_st_free_nodes(char *key, SyckNode *n, char *arg)
SyckLevel * syck_parser_current_level(SyckParser *p)
void syck_parser_reset_levels(SyckParser *p)
void syck_free_parser(SyckParser *p)
long syck_move_tokens(SyckParser *p)
void syck_st_free(SyckParser *p)
void syck_parser_implicit_typing(SyckParser *p, int flag)
char * syck_strndup(const char *buf, long len)
long syck_parser_readlen(SyckParser *p, long max_size)
void syck_parser_bad_anchor_handler(SyckParser *p, SyckBadAnchorHandler hdlr)
SyckParser * syck_new_parser(void)
int syck_lookup_sym(SyckParser *p, SYMID id, void **datap)
long syck_io_file_read(char *buf, SyckIoFile *file, long max_size, long skip)
#define S_MEMCPY(p1, p2, type, n)
void syck_parser_handler(SyckParser *p, SyckNodeHandler hdlr)
#define S_REALLOC_N(var, type, n)
void syck_parser_set_root_on_error(SyckParser *p, SYMID roer)
#define S_MEMMOVE(p1, p2, type, n)
void syck_free_node(SyckNode *n)
long syck_parser_read(SyckParser *p)
SyckNode *(* SyckBadAnchorHandler)(SyckParser *, char *)
void syck_parser_pop_level(SyckParser *)
unsigned char buf[MIME_BUF_SIZE]
void syck_parser_str(SyckParser *p, char *ptr, long len, SyckIoStrRead read)
int syck_add_sym(SyckParser *p, void *data)
void free_any_io(SyckParser *p)
void syck_default_error_handler(SyckParser *p, const char *msg)
register unsigned int len
SYMID(* SyckNodeHandler)(SyckParser *, SyckNode *)
long(* SyckIoFileRead)(char *, SyckIoFile *, long, long)
void syck_check_limit(SyckParser *p, long len)
long syck_io_str_read(char *buf, SyckIoStr *str, long max_size, long skip)
void syck_parser_set_input_type(SyckParser *p, enum syck_parser_input input_type)
static unsigned int hash(const char *str, unsigned int len)
int syck_st_free_syms(void *key, bytestring_t *sav, void *dummy)
void syck_parser_file(SyckParser *p, FILE *fp, SyckIoFileRead read)
void syck_parser_add_level(SyckParser *p, int len, enum syck_level_status status)
void syck_parser_str_auto(SyckParser *p, char *ptr, SyckIoStrRead read)
long(* SyckIoStrRead)(char *, SyckIoStr *, long, long)
#define S_MEMZERO(p, type, n)
void syck_parser_reset_cursor(SyckParser *p)