REXML::IOSource (Class)

In: rexml/source.rb
Parent: Source

A Source that wraps an IO. See the Source class for method documentation

Methods

consume   current_line   empty?   match   new   read   scan  

Public Class methods

block_size has been deprecated

[Source]

# 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

Public Instance methods

[Source]

# File rexml/source.rb, line 161
                def consume( pattern )
                        match( pattern, true )
                end

@return the current line in the source

[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

[Source]

# File rexml/source.rb, line 183
                def empty?
                        super and ( @source.nil? || @source.eof? )
                end

[Source]

# 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

[Source]

# 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

[Source]

# 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

[Validate]