class REXML::Parsers::StreamParser - rexml: Ruby Standard Library Documentation

# class REXML::Parsers::StreamParser

### Public Class Methods

new(source, listener) click to toggle source

    # File rexml-3.4.0/lib/rexml/parsers/streamparser.rb, line 7
    def initialize source, listener
      @listener = listener
      @parser = BaseParser.new( source )
      @entities = {}
    end

### Public Instance Methods

add_listener( listener ) click to toggle source

    # File rexml-3.4.0/lib/rexml/parsers/streamparser.rb, line 13
    def add_listener( listener )
      @parser.add_listener( listener )
    end

entity_expansion_count() click to toggle source

    # File rexml-3.4.0/lib/rexml/parsers/streamparser.rb, line 17
    def entity_expansion_count
      @parser.entity_expansion_count
    end

entity_expansion_limit=( limit ) click to toggle source

    # File rexml-3.4.0/lib/rexml/parsers/streamparser.rb, line 21
    def entity_expansion_limit=( limit )
      @parser.entity_expansion_limit = limit
    end

entity_expansion_text_limit=( limit ) click to toggle source

    # File rexml-3.4.0/lib/rexml/parsers/streamparser.rb, line 25
    def entity_expansion_text_limit=( limit )
      @parser.entity_expansion_text_limit = limit
    end

parse() click to toggle source

    # File rexml-3.4.0/lib/rexml/parsers/streamparser.rb, line 29
    def parse
      # entity string
      while true
        event = @parser.pull
        case event[0]
        when :end_document
          return
        when :start_element
          attrs = event[2].each do |n, v|
            event[2][n] = @parser.unnormalize( v )
          end
          @listener.tag_start( event[1], attrs )
        when :end_element
          @listener.tag_end( event[1] )
        when :text
          unnormalized = @parser.unnormalize( event[1], @entities )
          @listener.text( unnormalized )
        when :processing_instruction
          @listener.instruction( *event[1,2] )
        when :start_doctype
          @listener.doctype( *event[1..-1] )
        when :end_doctype
          # FIXME: remove this condition for milestone:3.2
          @listener.doctype_end if @listener.respond_to? :doctype_end
        when :comment, :attlistdecl, :cdata, :xmldecl, :elementdecl
          @listener.send( event[0].to_s, *event[1..-1] )
        when :entitydecl, :notationdecl
          @entities[ event[1] ] = event[2] if event.size == 3
          @listener.send( event[0].to_s, event[1..-1] )
        when :externalentity
          entity_reference = event[1]
          content = entity_reference.gsub(/\A%|;\z/, "")
          @listener.entity(content)
        end
      end
    end