def listing node
informal = !node.title?
listing_attributes = (common_attributes node.id, node.role, node.reftext)
if node.style == 'source' && (node.attr? 'language')
numbering = (node.attr? 'linenums', nil, false) ? 'numbered' : 'unnumbered'
listing_content = %(<programlisting#{informal ? listing_attributes : nil} language="#{node.attr 'language', nil, false}" linenumbering="#{numbering}">#{node.content}</programlisting>)
else
listing_content = %(<screen#{informal ? listing_attributes : nil}>#{node.content}</screen>)
end
if informal
listing_content
else
%(<formalpara#{listing_attributes}>
<title>#{node.title}</title>
<para>
#{listing_content}
</para>
</formalpara>)
end
end