Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
block_size has been deprecated
# File rexml/source.rb, line 136 def initialize(arg, block_size=500, encoding=nil) @er_source = @source = arg @to_utf = false # Determining the encoding is a deceptively difficult issue to resolve. # First, we check the first two bytes for UTF-16. Then we # assume that the encoding is at least ASCII enough for the '>', and # we read until we get one of those. This gives us the XML declaration, # if there is one. If there isn't one, the file MUST be UTF-8, as per # the XML spec. If there is one, we can determine the encoding from # it. @buffer = "" str = @source.read( 2 ) || '' if encoding self.encoding = encoding elsif str[0,2] == "\xfe\xff" @line_break = "\000>" elsif str[0,2] == "\xff\xfe" @line_break = ">\000" elsif str[0,2] == "\xef\xbb" str += @source.read(1) str = '' if (str[2,1] == "\xBF") @line_break = ">" else @line_break = ">" end super( @source.eof? ? str : str+@source.readline( @line_break ) ) if !@to_utf and @buffer.respond_to?(:force_encoding) and @source.respond_to?(:external_encoding) and @source.external_encoding != ::Encoding::UTF_8 @force_utf8 = true else @force_utf8 = false end end
# File rexml/source.rb, line 205 def consume( pattern ) match( pattern, true ) end
@return the current line in the source
# File rexml/source.rb, line 234 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 225 def empty? super and ( @source.nil? || @source.eof? ) end
# File rexml/source.rb, line 209 def match( pattern, cons=false ) rv = pattern.match(@buffer) @buffer = $' if cons and rv while !rv and @source begin @buffer << readline rv = pattern.match(@buffer) @buffer = $' if cons and rv rescue @source = nil end end rv.taint rv end
# File rexml/source.rb, line 229 def position @er_source.pos rescue 0 end
# File rexml/source.rb, line 197 def read begin @buffer << readline rescue Exception, NameError @source = nil end end
# File rexml/source.rb, line 174 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 @buffer << readline rescue Iconv::IllegalSequence raise rescue @source = nil end end rv = super end rv.taint rv end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.