def dlist node
result = []
if node.style == 'horizontal'
result << %(<#{tag_name = node.title? ? 'table' : 'informaltable'}#{common_attributes node.id, node.role, node.reftext} tabstyle="horizontal" frame="none" colsep="0" rowsep="0">
#{title_tag node}<tgroup cols="2">
<colspec colwidth="#{node.attr 'labelwidth', 15}*"/>
<colspec colwidth="#{node.attr 'itemwidth', 85}*"/>
<tbody valign="top">)
node.items.each do |terms, dd|
result << %(<row>
<entry>)
[*terms].each do |dt|
result << %(<simpara>#{dt.text}</simpara>)
end
result << %(</entry>
<entry>)
unless dd.nil?
result << %(<simpara>#{dd.text}</simpara>) if dd.text?
result << dd.content if dd.blocks?
end
result << %(</entry>
</row>)
end
result << %(</tbody>
</tgroup>
</#{tag_name}>)
else
tags = DLIST_TAGS[node.style]
list_tag = tags[:list]
entry_tag = tags[:entry]
label_tag = tags[:label]
term_tag = tags[:term]
item_tag = tags[:item]
if list_tag
result << %(<#{list_tag}#{common_attributes node.id, node.role, node.reftext}>)
result << %(<title>#{node.title}</title>) if node.title?
end
node.items.each do |terms, dd|
result << %(<#{entry_tag}>)
result << %(<#{label_tag}>) if label_tag
[*terms].each do |dt|
result << %(<#{term_tag}>#{dt.text}</#{term_tag}>)
end
result << %(</#{label_tag}>) if label_tag
result << %(<#{item_tag}>)
unless dd.nil?
result << %(<simpara>#{dd.text}</simpara>) if dd.text?
result << dd.content if dd.blocks?
end
result << %(</#{item_tag}>)
result << %(</#{entry_tag}>)
end
result << %(</#{list_tag}>) if list_tag
end
result * LF
end