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;
}