class LibXML::XML::InputCallbacks
Support for adding custom scheme handlers.
Public Class Methods
add_scheme
click to toggle source
No documentation available.
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
click to toggle source
Register a new set of I/O callback for handling parser input.
static VALUE input_callbacks_register_input_callbacks(VALUE self)
{
xmlRegisterInputCallbacks(ic_match, ic_open, ic_read, ic_close);
return (Qtrue);
}
remove_scheme
click to toggle source
No documentation available.
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;
}