Lines Matching refs:parser

80 static int find_prefix(apr_xml_parser *parser, const char *prefix)  in find_prefix()  argument
82 apr_xml_elem *elem = parser->cur_elem; in find_prefix()
125 apr_xml_parser *parser = userdata; in start_handler() local
134 if (parser->error) in start_handler()
137 elem = apr_pcalloc(parser->p, sizeof(*elem)); in start_handler()
140 elem->name = elem_name = apr_pstrdup(parser->p, name); in start_handler()
144 attr = apr_palloc(parser->p, sizeof(*attr)); in start_handler()
145 attr->name = apr_pstrdup(parser->p, *attrs++); in start_handler()
146 attr->value = apr_pstrdup(parser->p, *attrs++); in start_handler()
152 if (parser->cur_elem == NULL) { in start_handler()
154 parser->cur_elem = parser->doc->root = elem; in start_handler()
158 elem->parent = parser->cur_elem; in start_handler()
172 parser->cur_elem = elem; in start_handler()
188 parser->error = APR_XML_NS_ERROR_INVALID_DECL; in start_handler()
200 quoted = apr_xml_quote_string(parser->p, attr->value, 1); in start_handler()
203 ns_scope = apr_pcalloc(parser->p, sizeof(*ns_scope)); in start_handler()
205 ns_scope->ns = apr_xml_insert_uri(parser->doc->namespaces, quoted); in start_handler()
220 elem->lang = apr_xml_quote_string(parser->p, attr->value, 1); in start_handler()
253 elem->ns = find_prefix(parser, ""); in start_handler()
260 elem->ns = find_prefix(parser, elem->name); in start_handler()
264 parser->error = elem->ns; in start_handler()
291 attr->ns = find_prefix(parser, attr->name); in start_handler()
295 parser->error = attr->ns; in start_handler()
304 apr_xml_parser *parser = userdata; in end_handler() local
307 if (parser->error) in end_handler()
311 parser->cur_elem = parser->cur_elem->parent; in end_handler()
316 apr_xml_parser *parser = userdata; in cdata_handler() local
322 if (parser->error) in cdata_handler()
325 elem = parser->cur_elem; in cdata_handler()
326 s = apr_pstrndup(parser->p, data, len); in cdata_handler()
337 apr_text_append(parser->p, hdr, s); in cdata_handler()
342 apr_xml_parser *parser = ctx; in cleanup_parser() local
344 XML_ParserFree(parser->xp); in cleanup_parser()
345 parser->xp = NULL; in cleanup_parser()
358 apr_xml_parser *parser = userData; in entity_declaration() local
360 XML_StopParser(parser->xp, XML_FALSE); in entity_declaration()
371 apr_xml_parser *parser = apr_pcalloc(pool, sizeof(*parser)); in apr_xml_parser_create() local
373 parser->p = pool; in apr_xml_parser_create()
374 parser->doc = apr_pcalloc(pool, sizeof(*parser->doc)); in apr_xml_parser_create()
376 parser->doc->namespaces = apr_array_make(pool, 5, sizeof(const char *)); in apr_xml_parser_create()
379 apr_xml_insert_uri(parser->doc->namespaces, APR_KW_DAV); in apr_xml_parser_create()
381 parser->xp = XML_ParserCreate(NULL); in apr_xml_parser_create()
382 if (parser->xp == NULL) { in apr_xml_parser_create()
387 apr_pool_cleanup_register(pool, parser, cleanup_parser, in apr_xml_parser_create()
390 XML_SetUserData(parser->xp, parser); in apr_xml_parser_create()
391 XML_SetElementHandler(parser->xp, start_handler, end_handler); in apr_xml_parser_create()
392 XML_SetCharacterDataHandler(parser->xp, cdata_handler); in apr_xml_parser_create()
402 XML_SetEntityDeclHandler(parser->xp, entity_declaration); in apr_xml_parser_create()
404 XML_SetDefaultHandler(parser->xp, default_handler); in apr_xml_parser_create()
407 return parser; in apr_xml_parser_create()
410 static apr_status_t do_parse(apr_xml_parser *parser, in do_parse() argument
414 if (parser->xp == NULL) { in do_parse()
415 parser->error = APR_XML_ERROR_PARSE_DONE; in do_parse()
418 int rv = XML_Parse(parser->xp, data, (int)len, is_final); in do_parse()
421 parser->error = APR_XML_ERROR_EXPAT; in do_parse()
422 parser->xp_err = XML_GetErrorCode(parser->xp); in do_parse()
427 return parser->error ? APR_EGENERAL : APR_SUCCESS; in do_parse()
430 APU_DECLARE(apr_status_t) apr_xml_parser_feed(apr_xml_parser *parser, in apr_xml_parser_feed() argument
434 return do_parse(parser, data, len, 0 /* is_final */); in apr_xml_parser_feed()
437 APU_DECLARE(apr_status_t) apr_xml_parser_done(apr_xml_parser *parser, in apr_xml_parser_done() argument
441 apr_status_t status = do_parse(parser, &end, 0, 1 /* is_final */); in apr_xml_parser_done()
444 (void) apr_pool_cleanup_run(parser->p, parser, cleanup_parser); in apr_xml_parser_done()
450 *pdoc = parser->doc; in apr_xml_parser_done()
454 APU_DECLARE(char *) apr_xml_parser_geterror(apr_xml_parser *parser, in apr_xml_parser_geterror() argument
458 int error = parser->error; in apr_xml_parser_geterror()
462 parser->error = 0; in apr_xml_parser_geterror()
480 XML_ErrorString(parser->xp_err), parser->xp_err); in apr_xml_parser_geterror()
497 apr_xml_parser **parser, in apr_xml_parse_file() argument
506 *parser = apr_xml_parser_create(p); in apr_xml_parse_file()
507 if (*parser == NULL) { in apr_xml_parse_file()
518 rv = apr_xml_parser_feed(*parser, buffer, length); in apr_xml_parse_file()
529 rv = apr_xml_parser_done(*parser, ppdoc); in apr_xml_parse_file()
530 *parser = NULL; in apr_xml_parse_file()