123456789_123456789_123456789_123456789_123456789_

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

Class Method Details

.add_scheme

No documentation available.

[ GitHub ]

  
# File 'ext/libxml/ruby_xml_input_cbg.c', line 132

static VALUE input_callbacks_add_scheme(VALUE self, VALUE scheme_name,
    VALUE class)
{
  ic_scheme *scheme;

  Check_Type(scheme_name, T_STRING);

  input_callbacks_register_once();

  scheme = ALLOC(ic_scheme);
  scheme->next_scheme = 0;
  scheme->scheme_name = ic_strdup(StringValueCStr(scheme_name));
  scheme->name_len = (int)strlen(scheme->scheme_name);
  scheme->class = class;
  rb_gc_register_address(&scheme->class);

  //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.

[ GitHub ]

  
# File 'ext/libxml/ruby_xml_input_cbg.c', line 120

static VALUE input_callbacks_register_input_callbacks(VALUE self)
{
  input_callbacks_register_once();
  return (Qtrue);
}

.remove_scheme

No documentation available.

[ GitHub ]

  
# File 'ext/libxml/ruby_xml_input_cbg.c', line 170

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;

    ic_scheme_free(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;

      ic_scheme_free(scheme->next_scheme);
      scheme->next_scheme = save_scheme;
      return Qtrue;
    }
    scheme = scheme->next_scheme;
  }
  return Qfalse;
}