def load(file=nil,format=nil)
file = @filename if file.nil?
format = @format if format.nil?
@value = {}
raise IOError.new("File #{file} not readable!") unless File.readable? file
case format
when List::FORMAT_BINARY, List::FORMAT_XML, List::FORMAT_PLAIN then
prsr = @@parsers[format-1].new
@value = prsr.load({:file => file})
when List::FORMAT_AUTO then
magic_number = IO.read(file,12)
raise IOError.new("File #{file} is empty.") unless magic_number
filetype = magic_number[0..5]
version = magic_number[6..7]
prsr = nil
if filetype == "bplist" then
raise CFFormatError.new("Wrong file version #{version}") unless version == "00"
prsr = Binary.new
@format = List::FORMAT_BINARY
else
if magic_number =~ /^<(\?xml|!DOCTYPE|plist)/
prsr = CFPropertyList.xml_parser_interface.new
@format = List::FORMAT_XML
else
prsr = PlainParser.new
@format = List::FORMAT_PLAIN
end
end
@value = prsr.load({:file => file})
end
raise CFFormatError.new("Invalid format or parser error!") if @value.nil?
end