In: |
rexml/source.rb
|
Parent: | Source |
block_size has been deprecated
# File rexml/source.rb, line 116 def initialize(arg, block_size=500) @er_source = @source = arg @to_utf = false # FIXME # This is broken. If the user puts in enough carriage returns, this can fail # to calculate the correct encoding. super @source.read( 100 ) @line_break = encode( '>' ) end
@return the current line in the source
# File rexml/source.rb, line 188 def current_line begin pos = @er_source.pos # The byte position in the source lineno = @er_source.lineno # The XML < position in the source @er_source.rewind line = 0 # The \r\n position in the source begin while @er_source.pos < pos @er_source.readline line += 1 end rescue end rescue IOError pos = -1 line = -1 end [pos, lineno, line] end
# File rexml/source.rb, line 165 def match( pattern, cons=false ) rv = pattern.match(@buffer) @buffer = $' if cons and rv while !rv and @source begin str = @source.readline(@line_break) str = decode(str) if @to_utf and str @buffer << str rv = pattern.match(@buffer) @buffer = $' if cons and rv rescue @source = nil end end rv.taint rv end
# File rexml/source.rb, line 151 def read begin str = @source.readline(@line_break) str = decode(str) if @to_utf and str @buffer << str rescue Exception, NameError @source = nil end end
# File rexml/source.rb, line 126 def scan(pattern, cons=false) rv = super # You'll notice that this next section is very similar to the same # section in match(), but just a liiittle different. This is # because it is a touch faster to do it this way with scan() # than the way match() does it; enough faster to warrent duplicating # some code if rv.size == 0 until @buffer =~ pattern or @source.nil? begin # READLINE OPT #str = @source.read(@block_size) str = @source.readline(@line_break) str = decode(str) if @to_utf and str @buffer << str rescue @source = nil end end rv = super end rv.taint rv end