class Plist::StreamParser
Constants
- COMMENT_END
- COMMENT_START
- DOCTYPE_PATTERN
- TEXT
- XMLDECL_PATTERN
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})([^>]*)>/i end_tag = /<\/(#{plist_tags})[^>]*>/i 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