def dlist node
result = []
id_attribute = node.id ? %( id="#{node.id}") : nil
classes = case node.style
when 'qanda'
['qlist', 'qanda', node.role]
when 'horizontal'
['hdlist', node.role]
else
['dlist', node.style, node.role]
end.compact
class_attribute = %( class="#{classes * ' '}")
result << %(<div#{id_attribute}#{class_attribute}>)
result << %(<div class="title">#{node.title}</div>) if node.title?
case node.style
when 'qanda'
result << '<ol>'
node.items.each do |terms, dd|
result << '<li>'
[*terms].each do |dt|
result << %(<p><em>#{dt.text}</em></p>)
end
if dd
result << %(<p>#{dd.text}</p>) if dd.text?
result << dd.content if dd.blocks?
end
result << '</li>'
end
result << '</ol>'
when 'horizontal'
slash = @void_element_slash
result << '<table>'
if (node.attr? 'labelwidth') || (node.attr? 'itemwidth')
result << '<colgroup>'
col_style_attribute = (node.attr? 'labelwidth') ? %( style="width: #{(node.attr 'labelwidth').chomp '%'}%;") : nil
result << %(<col#{col_style_attribute}#{slash}>)
col_style_attribute = (node.attr? 'itemwidth') ? %( style="width: #{(node.attr 'itemwidth').chomp '%'}%;") : nil
result << %(<col#{col_style_attribute}#{slash}>)
result << '</colgroup>'
end
node.items.each do |terms, dd|
result << '<tr>'
result << %(<td class="hdlist1#{(node.option? 'strong') ? ' strong' : nil}">)
terms_array = [*terms]
last_term = terms_array[-1]
terms_array.each do |dt|
result << dt.text
result << %(<br#{slash}>) if dt != last_term
end
result << '</td>'
result << '<td class="hdlist2">'
if dd
result << %(<p>#{dd.text}</p>) if dd.text?
result << dd.content if dd.blocks?
end
result << '</td>'
result << '</tr>'
end
result << '</table>'
else
result << '<dl>'
dt_style_attribute = node.style ? nil : ' class="hdlist1"'
node.items.each do |terms, dd|
[*terms].each do |dt|
result << %(<dt#{dt_style_attribute}>#{dt.text}</dt>)
end
if dd
result << '<dd>'
result << %(<p>#{dd.text}</p>) if dd.text?
result << dd.content if dd.blocks?
result << '</dd>'
end
end
result << '</dl>'
end
result << '</div>'
result * LF
end