Parent

Methods

Class/Module Index [+]

Quicksearch

Plist::StreamParser

Public Class Methods

new( filename_or_xml, listener ) click to toggle source
# File lib/facter/util/plist/parser.rb, line 62
def initialize( filename_or_xml, listener )
  @filename_or_xml = filename_or_xml
  @listener = listener
end

Public Instance Methods

parse() click to toggle source
# File lib/facter/util/plist/parser.rb, line 73
def parse
  plist_tags = PTag::mappings.keys.join('|')
  start_tag  = /<(#{plist_tags})([^>]*)>/
  end_tag  = /<\/(#{plist_tags})[^>]*>/

  require 'strscan'

  contents = (
    if (File.exists? @filename_or_xml)
      File.open(@filename_or_xml) {|f| f.read}
    else
      @filename_or_xml
    end
  )

  @scanner = StringScanner.new( contents )
  until @scanner.eos?
    if @scanner.scan(COMMENT_START)
      @scanner.scan(COMMENT_END)
    elsif @scanner.scan(XMLDECL_PATTERN)
    elsif @scanner.scan(DOCTYPE_PATTERN)
    elsif @scanner.scan(start_tag)
      @listener.tag_start(@scanner[1], nil)
      if (@scanner[2] =~ /\/$/)
        @listener.tag_end(@scanner[1])
      end
    elsif @scanner.scan(TEXT)
      @listener.text(@scanner[1])
    elsif @scanner.scan(end_tag)
      @listener.tag_end(@scanner[1])
    else
      raise "Unimplemented element"
    end
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.