def self.parse_header_metadata(reader, document = nil)
process_attribute_entries(reader, document)
metadata = {}
implicit_author = nil
implicit_authors = nil
if reader.has_more_lines? && !reader.peek_line.chomp.empty?
author_metadata = process_authors reader.get_line
unless author_metadata.empty?
if !document.nil?
author_metadata.map do |key, val|
val = val.is_a?(String) ? document.apply_header_subs(val) : val
document.attributes[key] = val if !document.attributes.has_key?(key)
val
end
implicit_author = document.attributes['author']
implicit_authors = document.attributes['authors']
end
metadata = author_metadata
end
process_attribute_entries(reader, document)
rev_metadata = {}
if reader.has_more_lines? && !reader.peek_line.chomp.empty?
rev_line = reader.get_line
if match = rev_line.match(REGEXP[:revision_info])
rev_metadata['revdate'] = match[2].strip
rev_metadata['revnumber'] = match[1].rstrip unless match[1].nil?
rev_metadata['revremark'] = match[3].rstrip unless match[3].nil?
else
reader.unshift_line rev_line
end
end
unless rev_metadata.empty?
if !document.nil?
rev_metadata.map do |key, val|
val = document.apply_header_subs(val)
document.attributes[key] = val if !document.attributes.has_key?(key)
val
end
end
metadata.update rev_metadata
end
process_attribute_entries(reader, document)
reader.skip_blank_lines
end
if !document.nil?
author_metadata = nil
if document.attributes.has_key?('author') &&
(author_line = document.attributes['author']) != implicit_author
author_metadata = process_authors author_line, true, false
elsif document.attributes.has_key?('authors') &&
(author_line = document.attributes['authors']) != implicit_authors
author_metadata = process_authors author_line, true
else
authors = []
author_key = "author_#{authors.size + 1}"
while document.attributes.has_key? author_key
authors << document.attributes[author_key]
author_key = "author_#{authors.size + 1}"
end
if authors.size == 1
author_metadata = process_authors authors.first, true, false
elsif authors.size > 1
author_metadata = process_authors authors.join('; '), true
end
end
unless author_metadata.nil?
document.attributes.update author_metadata
if !document.attributes.has_key?('email') && document.attributes.has_key?('email_1')
document.attributes['email'] = document.attributes['email_1']
end
end
end
metadata
end