Methods
I
N
T
X
Constants
CONTENT_PATTERN = /\s*([^=]+)=(["'])([^\2]+?)\2/
 
NAMESPLIT = /^(?:([\w:][-\w.]*):)?([\w:][-\w.]*)/
 
Attributes
[RW] do_validate
[RW] ignore_unknown_element
[R] rss
Class Public methods
new()
# File lib/rss/parser.rb, line 268
def initialize
  @rss = nil
  @ignore_unknown_element = true
  @do_validate = true
  @ns_stack = [{"xml" => :xml}]
  @tag_stack = [[]]
  @text_stack = ['']
  @proc_stack = []
  @last_element = nil
  @version = @encoding = @standalone = nil
  @xml_stylesheets = []
  @xml_child_mode = false
  @xml_element = nil
  @last_xml_element = nil
end
Instance Public methods
instruction(name, content)
# File lib/rss/parser.rb, line 289
def instruction(name, content)
  if name == "xml-stylesheet"
    params = parse_pi_content(content)
    if params.has_key?("href")
      @xml_stylesheets << XMLStyleSheet.new(params)
    end
  end
end
tag_end(name)
# File lib/rss/parser.rb, line 351
def tag_end(name)
  if DEBUG
    p "end tag #{name}"
    p @tag_stack
  end
  text = @text_stack.pop
  tags = @tag_stack.pop
  pr = @proc_stack.pop
  pr.call(text, tags) unless pr.nil?
  @ns_stack.pop
end
tag_start(name, attributes)
# File lib/rss/parser.rb, line 298
def tag_start(name, attributes)
  @text_stack.push('')

  ns = @ns_stack.last.dup
  attrs = {}
  attributes.each do |n, v|
    if /\Axmlns(?:\z|:)/ =~ n
      ns[$POSTMATCH] = v
    else
      attrs[n] = v
    end
  end
  @ns_stack.push(ns)

  prefix, local = split_name(name)
  @tag_stack.last.push([_ns(ns, prefix), local])
  @tag_stack.push([])
  if @xml_child_mode
    previous = @last_xml_element
    element_attrs = attributes.dup
    unless previous
      ns.each do |ns_prefix, value|
        next if ns_prefix == "xml"
        key = ns_prefix.empty? ? "xmlns" : "xmlns:#{ns_prefix}"
        element_attrs[key] ||= value
      end
    end
    next_element = XML::Element.new(local,
                                    prefix.empty? ? nil : prefix,
                                    _ns(ns, prefix),
                                    element_attrs)
    previous << next_element if previous
    @last_xml_element = next_element
    pr = Proc.new do |text, tags|
      if previous
        @last_xml_element = previous
      else
        @xml_element = @last_xml_element
        @last_xml_element = nil
      end
    end
    @proc_stack.push(pr)
  else
    if @rss.nil? and respond_to?("initial_start_#{local}", true)
      __send__("initial_start_#{local}", local, prefix, attrs, ns.dup)
    elsif respond_to?("start_#{local}", true)
      __send__("start_#{local}", local, prefix, attrs, ns.dup)
    else
      start_else_element(local, prefix, attrs, ns.dup)
    end
  end
end
text(data)
# File lib/rss/parser.rb, line 363
def text(data)
  if @xml_child_mode
    @last_xml_element << data if @last_xml_element
  else
    @text_stack.last << data
  end
end
xmldecl(version, encoding, standalone)

set instance vars for version, encoding, standalone

# File lib/rss/parser.rb, line 285
def xmldecl(version, encoding, standalone)
  @version, @encoding, @standalone = version, encoding, standalone
end