class Asciidoctor::DocBook45::DocumentTemplate

def docinfo

def docinfo
  <<-EOF
  <% if has_header? && !notitle %>
  <%= template.title_tags(@header.title) %>
  <% end %>
  <% if attr? :revdate %>
  <date><%= attr :revdate %></date>
  <% else %>
  <date><%= attr :docdate %></date>
  <% end %>
  <% if has_header? %>
  <% if attr? :author %>
  <% if (attr :authorcount).to_i < 2 %>
  <author>
    #{tag 'firstname', :firstname}
    #{tag 'othername', :middlename}
    #{tag 'surname', :lastname}
    #{tag 'email', :email}
  </author>
  #{tag 'authorinitials', :authorinitials}
  <% else %>
  <authorgroup>
  <% (1..((attr :authorcount).to_i)).each do |idx| %>
    <author> 
      #{tag 'firstname', :"firstname_\#{idx}", true}
      #{tag 'othername', :"middlename_\#{idx}", true}
      #{tag 'surname', :"lastname_\#{idx}", true}
      #{tag 'email', :"email_\#{idx}", true}
    </author> 
  <% end %>
  </authorgroup>
  <% end %>
  <% end %>
  <% if (attr? :revnumber) || (attr? :revremark) %>
  <revhistory>
    <revision>
      #{tag 'revnumber', :revnumber}
      #{tag 'date', :revdate}
      #{tag 'authorinitials', :authorinitials}
      #{tag 'revremark', :revremark}
    </revision>
  </revhistory>
  <% end %>
= docinfo %>
  #{tag 'orgname', :orgname}
  <% end %>
  EOF
end

def template

def template
  @template ||= @eruby.new <<-EOF
#encoding:UTF-8%><?xml version="1.0" encoding="UTF-8"?>
DOCTYPE <%= doctype %> PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
 if attr? :toc %><?asciidoc-toc?><% end %>
 if attr? :numbered %><?asciidoc-numbered?><% end %>
 if doctype == 'book' %>
ook<% unless attr? :nolang %> lang="<%= attr :lang, 'en' %>"<% end %>>
<bookinfo>
docinfo}
</bookinfo>
= content.chomp %>
book>
 else %>
rticle<% unless attr? :nolang %> lang="<%= attr :lang, 'en' %>"<% end %>>
<articleinfo>
docinfo}
</articleinfo>
= content.chomp %>
article>
 end %>
  EOF
end

def title_tags(str)

def title_tags(str)
  if str.include?(': ')
    title, _, subtitle = str.rpartition(': ')
    %(<title>#{title}</title>
  <subtitle>#{subtitle}</subtitle>)
  else
    %(<title>#{str}</title>)
  end
end