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