Class: LibXML::XML::InputCallbacks
Relationships & Source Files | |
Inherits: | Object |
Defined in: | ext/libxml/ruby_xml_input_cbg.c, ext/libxml/ruby_xml_input_cbg.c |
Overview
Support for adding custom scheme handlers.
Class Method Summary
-
.add_scheme
No documentation available.
-
.register
Register a new set of I/O callback for handling parser input.
-
.remove_scheme
No documentation available.
Class Method Details
.add_scheme
No documentation available.
# File 'ext/libxml/ruby_xml_input_cbg.c', line 103
static VALUE input_callbacks_add_scheme(VALUE self, VALUE scheme_name, VALUE class) { ic_scheme *scheme; Check_Type(scheme_name, T_STRING); scheme = (ic_scheme*) malloc(sizeof(ic_scheme)); scheme->next_scheme = 0; scheme->scheme_name = strdup(StringValuePtr(scheme_name)); /* TODO alloc, dealloc */ scheme->name_len = (int)strlen(scheme->scheme_name); scheme->class = class; /* TODO alloc, dealloc */ //fprintf( stderr, "registered: %s, %d, %s\n", scheme->scheme_name, scheme->name_len, scheme->class ); if (0 == first_scheme) first_scheme = scheme; else { ic_scheme *pos; pos = first_scheme; while (0 != pos->next_scheme) pos = pos->next_scheme; pos->next_scheme = scheme; } return (Qtrue); }
.register
Register a new set of I/O callback for handling parser input.
# File 'ext/libxml/ruby_xml_input_cbg.c', line 91
static VALUE input_callbacks_register_input_callbacks(VALUE self) { xmlRegisterInputCallbacks(ic_match, ic_open, ic_read, ic_close); return (Qtrue); }
.remove_scheme
No documentation available.
# File 'ext/libxml/ruby_xml_input_cbg.c', line 138
static VALUE input_callbacks_remove_scheme(VALUE self, VALUE scheme_name) { char *name; ic_scheme *save_scheme, *scheme; Check_Type(scheme_name, T_STRING); name = StringValuePtr(scheme_name); if (0 == first_scheme) return Qfalse; if (!strncmp(name, first_scheme->scheme_name, first_scheme->name_len)) { save_scheme = first_scheme->next_scheme; ruby_xfree(first_scheme->scheme_name); ruby_xfree(first_scheme); first_scheme = save_scheme; return Qtrue; } scheme = first_scheme; while (0 != scheme->next_scheme) { if (!strncmp(name, scheme->next_scheme->scheme_name, scheme->next_scheme->name_len)) { save_scheme = scheme->next_scheme->next_scheme; ruby_xfree(scheme->next_scheme->scheme_name); ruby_xfree(scheme->next_scheme); scheme->next_scheme = save_scheme; return Qtrue; } scheme = scheme->next_scheme; } return Qfalse; }