Use a method for getting input in the XML lexer.
Instead of directly accessing the `data` instance variable the C/Java code now uses the method `read_data`. This is part of one of the various steps required to allow Oga to read data from IO like instances. It also means I can freely change the name of the instance variable without also having to change the C/Java code.
This commit is contained in:
parent
418b4ef498
commit
6b9d65923a
|
@ -70,12 +70,12 @@ void liboga_xml_lexer_callback_simple(VALUE self, const char *name)
|
||||||
VALUE oga_xml_lexer_advance(VALUE self)
|
VALUE oga_xml_lexer_advance(VALUE self)
|
||||||
{
|
{
|
||||||
/* Pull the data in from Ruby land. */
|
/* Pull the data in from Ruby land. */
|
||||||
VALUE data_ivar = rb_ivar_get(self, rb_intern("@data"));
|
VALUE data_block = rb_funcall(self, rb_intern("read_data"), 0);
|
||||||
|
|
||||||
/* Make sure that all data passed back to Ruby has the proper encoding. */
|
/* Make sure that all data passed back to Ruby has the proper encoding. */
|
||||||
rb_encoding *encoding = rb_enc_get(data_ivar);
|
rb_encoding *encoding = rb_enc_get(data_block);
|
||||||
|
|
||||||
char *data_str_val = StringValuePtr(data_ivar);
|
char *data_str_val = StringValuePtr(data_block);
|
||||||
|
|
||||||
const char *p = data_str_val;
|
const char *p = data_str_val;
|
||||||
const char *pe = data_str_val + strlen(data_str_val);
|
const char *pe = data_str_val + strlen(data_str_val);
|
||||||
|
|
|
@ -82,7 +82,7 @@ public class Lexer extends RubyObject
|
||||||
public IRubyObject advance_native(ThreadContext context)
|
public IRubyObject advance_native(ThreadContext context)
|
||||||
{
|
{
|
||||||
// Pull the data in from Ruby land.
|
// Pull the data in from Ruby land.
|
||||||
RubyString rb_str = (RubyString) this.getInstanceVariable("@data");
|
RubyString rb_str = (RubyString) this.callMethod(context, "read_data");
|
||||||
Encoding encoding = rb_str.getEncoding();
|
Encoding encoding = rb_str.getEncoding();
|
||||||
|
|
||||||
byte[] data = rb_str.getBytes();
|
byte[] data = rb_str.getBytes();
|
||||||
|
|
|
@ -64,6 +64,15 @@ module Oga
|
||||||
@elements = []
|
@elements = []
|
||||||
end
|
end
|
||||||
|
|
||||||
|
##
|
||||||
|
# Returns the next block of data to lex.
|
||||||
|
#
|
||||||
|
# @return [String]
|
||||||
|
#
|
||||||
|
def read_data
|
||||||
|
return @data
|
||||||
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Gathers all the tokens for the input and returns them as an Array.
|
# Gathers all the tokens for the input and returns them as an Array.
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue