def self.parse_document_header(reader, document)
block_attributes = parse_block_metadata_lines(reader, document)
if (has_doctitle_line = is_next_line_document_title?(reader, block_attributes)) &&
block_attributes.has_key?('title')
return document.finalize_header block_attributes, false
end
assigned_doctitle = nil
unless (val = document.attributes['doctitle']).nil_or_empty?
document.title = assigned_doctitle = val
end
section_title = nil
if has_doctitle_line
source_location = reader.cursor if document.sourcemap
document.id, _, doctitle, _, single_line = parse_section_title reader, document
unless assigned_doctitle
document.title = assigned_doctitle = doctitle
end
document.set_attribute 'compat-mode', '' unless single_line
if (separator = block_attributes.delete 'separator')
document.set_attribute 'title-separator', separator
end
document.header.source_location = source_location if source_location
document.attributes['doctitle'] = section_title = doctitle
if document.id
block_attributes.delete 1
block_attributes.delete 'id'
else
if (style = block_attributes.delete 1)
style_attrs = { 1 => style }
parse_style_attribute style_attrs, reader
block_attributes['id'] = style_attrs['id'] if style_attrs.key? 'id'
end
document.id = block_attributes.delete 'id'
end
parse_header_metadata reader, document
end
unless (val = document.attributes['doctitle']).nil_or_empty? || val == section_title
document.title = assigned_doctitle = val
end
document.attributes['doctitle'] = assigned_doctitle if assigned_doctitle
parse_manpage_header(reader, document) if document.doctype == 'manpage'
document.finalize_header block_attributes
end