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 87 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 100 def buffer @scanner.rest end
buffer_encoding=(encoding)
click to toggle source
# File lib/rexml/source.rb, line 110 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 175 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 104 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 170 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 116 def encoding=(enc) return unless super encoding_updated end
ensure_buffer()
click to toggle source
# File lib/rexml/source.rb, line 134 def ensure_buffer end
match(pattern, cons=false)
click to toggle source
# File lib/rexml/source.rb, line 137 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 145 def match?(pattern, cons=false) if cons !@scanner.skip(pattern).nil? else !@scanner.match?(pattern).nil? end end
peek_byte()
click to toggle source
# File lib/rexml/source.rb, line 161 def peek_byte @scanner.peek_byte end
position()
click to toggle source
# File lib/rexml/source.rb, line 153 def position @scanner.pos end
position=(pos)
click to toggle source
# File lib/rexml/source.rb, line 157 def position=(pos) @scanner.pos = pos end
read(term = nil)
click to toggle source
# File lib/rexml/source.rb, line 121 def read(term = nil) end
read_until(term)
click to toggle source
# File lib/rexml/source.rb, line 124 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
scan_byte()
click to toggle source
# File lib/rexml/source.rb, line 165 def scan_byte @scanner.scan_byte end