ext/wankel/wankel_sax_parser.c in wankel-0.1.1 vs ext/wankel/wankel_sax_parser.c in wankel-0.2.0

- old
+ new

@@ -99,19 +99,50 @@ yajl_helper_check_status(p->h, status, 0, NULL, 0); return Qnil; } +static VALUE sax_parser_write(VALUE self, VALUE input) { + const char * cptr; + size_t len; + yajl_status status; + sax_parser * p; + Data_Get_Struct(self, sax_parser, p); + + Check_Type(input, T_STRING); + cptr = RSTRING_PTR(input); + len = RSTRING_LEN(input); + status = yajl_parse(p->h, (const unsigned char*)cptr, len); + yajl_helper_check_status(p->h, status, 1, (const unsigned char*)cptr, len); + + return Qnil; +} + +static VALUE sax_parser_complete(VALUE self) { + yajl_status status; + sax_parser * p; + Data_Get_Struct(self, sax_parser, p); + + status = yajl_complete_parse(p->h); + yajl_helper_check_status(p->h, status, 0, NULL, 0); + + return Qnil; +} + void Init_wankel_sax_parser() { c_wankel = rb_const_get(rb_cObject, rb_intern("Wankel")); c_wankelParser = rb_const_get(c_wankel, rb_intern("Parser")); c_saxParser = rb_define_class_under(c_wankel, "SaxParser", rb_cObject); e_parseError = rb_const_get(c_wankel, rb_intern("ParseError")); e_encodeError = rb_const_get(c_wankel, rb_intern("EncodeError")); rb_define_alloc_func(c_saxParser, sax_parser_alloc); rb_define_method(c_saxParser, "initialize", sax_parser_initialize, -1); rb_define_method(c_saxParser, "parse", sax_parser_parse, -1); + rb_define_method(c_saxParser, "write", sax_parser_write, 1); + rb_define_method(c_saxParser, "complete", sax_parser_complete, 0); + + rb_define_alias(c_saxParser, "<<", "write"); intern_merge = rb_intern("merge"); intern_clone = rb_intern("clone"); intern_DEFAULTS = rb_intern("DEFAULTS"); \ No newline at end of file