def listing node
nowrap = !(node.document.attr? 'prewrap') || (node.option? 'nowrap')
if node.style == 'source'
if (language = node.attr 'language', nil, false)
code_attrs = %( data-lang="#{language}")
else
code_attrs = nil
end
case node.document.attr 'source-highlighter'
when 'coderay'
pre_class = %( class="CodeRay highlight#{nowrap ? ' nowrap' : nil}")
when 'pygments'
pre_class = %( class="pygments highlight#{nowrap ? ' nowrap' : nil}")
when 'highlightjs', 'highlight.js'
pre_class = %( class="highlightjs highlight#{nowrap ? ' nowrap' : nil}")
code_attrs = %( class="language-#{language} hljs"#{code_attrs}) if language
when 'prettify'
pre_class = %( class="prettyprint highlight#{nowrap ? ' nowrap' : nil}#{(node.attr? 'linenums', nil, false) ? ' linenums' : nil}")
code_attrs = %( class="language-#{language}"#{code_attrs}) if language
when 'html-pipeline'
pre_class = language ? %( lang="#{language}") : nil
code_attrs = nil
else
pre_class = %( class="highlight#{nowrap ? ' nowrap' : nil}")
code_attrs = %( class="language-#{language}"#{code_attrs}) if language
end
pre_start = %(<pre#{pre_class}><code#{code_attrs}>)
pre_end = '</code></pre>'
else
pre_start = %(<pre#{nowrap ? ' class="nowrap"' : nil}>)
pre_end = '</pre>'
end
id_attribute = node.id ? %( id="#{node.id}") : nil
title_element = node.title? ? %(<div class="title">
%(<div#{id_attribute} class="listingblock#{(role = node.role) && " #{role}"}">
#{title_element}<div class="content">
#{pre_start}#{node.content}#{pre_end}
</div>
</div>)
end