def self.parse_document_header(reader, document)
block_attributes = parse_block_metadata_lines reader, document
if (implicit_doctitle = is_next_line_doctitle? reader, block_attributes, document.attributes['leveloffset']) &&
(block_attributes.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 implicit_doctitle
source_location = reader.cursor if document.sourcemap
document.id, _, doctitle, _, atx = parse_section_title reader, document
unless assigned_doctitle
document.title = assigned_doctitle = doctitle
end
document.set_attr 'compat-mode' unless atx || (document.attribute_locked? 'compat-mode')
if (separator = block_attributes.delete 'separator')
document.set_attr 'title-separator', separator unless document.attribute_locked? 'title-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