7: def self.parse(io)
8: entry = Nukumi2::Entry.new
9:
10: fields = {}
11:
12: while line = io.gets
13: line.chomp!
14: break if line.empty?
15:
16: if line =~ /^(\w\S+?):\s*(.*)/
17: field = $1.downcase
18: fields[field] = $2
19: elsif field
20: fields[field] << " " << line.lstrip
21: end
22: end
23:
24: fields.each { |field, value|
25: case field
26: when "category"
27: entry.categories.concat value.split.map { |c| c.strip }
28: when "date"
29: entry.time = Time.parse value
30: when "subject"
31: entry.title = value
32: else
33: if entry.respond_to? field + "="
34: entry.send field + "=", value
35: else
36: entry.fields[field] = value
37: end
38: end
39: }
40:
41: entry.content = io.read
42:
43: entry
44: end