class REXML::Source

A Source can be searched for patterns, and wraps buffers and other objects and provides consumption of text

Attributes

encoding[R]
line[R]

The line number of the last consumed text

Public Class Methods

new(arg, encoding=nil) click to toggle source

Constructor @param arg must be a String, and should be a valid XML document @param encoding if non-null, sets the encoding of the source to this value, overriding all encoding detection

# File lib/rexml/source.rb, line 81
def initialize(arg, encoding=nil)
  @orig = arg
  @scanner = StringScanner.new(@orig)
  if encoding
    self.encoding = encoding
  else
    detect_encoding
  end
  @line = 0
  @encoded_terms = {}
end

Public Instance Methods

buffer() click to toggle source

The current buffer (what we’re going to read next)

# File lib/rexml/source.rb, line 94
def buffer
  @scanner.rest
end
buffer_encoding=(encoding) click to toggle source
# File lib/rexml/source.rb, line 104
def buffer_encoding=(encoding)
  @scanner.string.force_encoding(encoding)
end
current_line() click to toggle source

@return the current line in the source

# File lib/rexml/source.rb, line 161
def current_line
  lines = @orig.split
  res = lines.grep @scanner.rest[0..30]
  res = res[-1] if res.kind_of? Array
  lines.index( res ) if res
end
drop_parsed_content() click to toggle source
# File lib/rexml/source.rb, line 98
def drop_parsed_content
  if @scanner.pos > Private::SCANNER_RESET_SIZE
    @scanner.string = @scanner.rest
  end
end
empty?() click to toggle source

@return true if the Source is exhausted

# File lib/rexml/source.rb, line 156
def empty?
  @scanner.eos?
end
encoding=(enc) click to toggle source

Inherited from Encoding Overridden to support optimized en/decoding

Calls superclass method REXML::Encoding#encoding=
# File lib/rexml/source.rb, line 110
def encoding=(enc)
  return unless super
  encoding_updated
end
ensure_buffer() click to toggle source
# File lib/rexml/source.rb, line 128
def ensure_buffer
end
match(pattern, cons=false) click to toggle source
# File lib/rexml/source.rb, line 131
def match(pattern, cons=false)
  if cons
    @scanner.scan(pattern).nil? ? nil : @scanner
  else
    @scanner.check(pattern).nil? ? nil : @scanner
  end
end
match?(pattern, cons=false) click to toggle source
# File lib/rexml/source.rb, line 139
def match?(pattern, cons=false)
  if cons
    !@scanner.skip(pattern).nil?
  else
    !@scanner.match?(pattern).nil?
  end
end
position() click to toggle source
# File lib/rexml/source.rb, line 147
def position
  @scanner.pos
end
position=(pos) click to toggle source
# File lib/rexml/source.rb, line 151
def position=(pos)
  @scanner.pos = pos
end
read(term = nil) click to toggle source
# File lib/rexml/source.rb, line 115
def read(term = nil)
end
read_until(term) click to toggle source
# File lib/rexml/source.rb, line 118
def read_until(term)
  pattern = Private::PRE_DEFINED_TERM_PATTERNS[term] || /#{Regexp.escape(term)}/
  data = @scanner.scan_until(pattern)
  unless data
    data = @scanner.rest
    @scanner.pos = @scanner.string.bytesize
  end
  data
end