# 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

new(arg, block_size=500)

attr_reader :block_size

[Source]

    # File rexml/source.rb, line 116
                    def initialize(arg, block_size=500)
                            @er_source = @source = arg
                            @to_utf = false
                            # READLINE OPT

                            # The following was commented out when IOSource started using readline

                            # to pull the data from the stream.

                            #@block_size = block_size

                            #super @source.read(@block_size)

                            @line_break = '>'
                            #super @source.readline( "\n" )

                            super @source.readline( @line_break )+@source.read
                            @line_break = encode( '>' )
                    end

## Public Instance methods

scan(pattern, cons=false)

[Source]

    # File rexml/source.rb, line 130
                    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

read()

[Source]

    # File rexml/source.rb, line 155
                    def read
                            begin
                                    str = @source.readline('>')
                                    str = decode(str) if @to_utf and str
                                    @buffer << str
                            rescue Exception, NameError
                                    @source = nil
                            end
                    end

consume( pattern )

[Source]

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

match( pattern, cons=false )

[Source]

    # File rexml/source.rb, line 169
                    def match( pattern, cons=false )
                            rv = pattern.match(@buffer)
                            @buffer = $' if cons and rv
                            while !rv and @source
                                    begin
                                            str = @source.readline('>')
                                            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

empty?()

[Source]

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

current_line()

@return the current line in the source

[Source]

    # File rexml/source.rb, line 192
                    def current_line
                            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
                            [pos, lineno, line]
                    end

[Validate]