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