resources/asciidoctor/lib/docbook_compat/convert_listing.rb (84 lines of code) (raw):

# frozen_string_literal: true module DocbookCompat ## # Methods code listings and their paired callout lists. module ConvertListing def convert_listing(node) [ node.title ? '<p>' : nil, node.id ? %(<a id="#{node.id}"></a>) : nil, node.title ? convert_listing_title(node) : nil, convert_listing_body(node), ].compact.join end def convert_inline_callout(node) %(<a id="#{node.id}"></a><i class="conum" data-value="#{node.text}"></i>) end def convert_colist(node) extra_classes = node.roles.empty? ? '' : " #{node.roles.join ' '}" [ %(<div class="calloutlist#{extra_classes}">), '<table border="0" summary="Callout list">', node.items.each_with_index.map do |item, index| convert_colist_item item, index end, '</table>', '</div>', ].flatten.compact.join "\n" end private def convert_listing_title(node) title = '<strong>' + node.title title += '.' unless [':', '.'].include? node.title[-1] title += "</strong></p>\n" title end def convert_listing_body(node) if (lang = node.attr 'language') convert_listing_body_with_language node, lang else %(<pre class="screen">#{node.content || ''}</pre>) end end def convert_listing_body_with_language(node, lang) extra_classes = node.roles.empty? ? '' : " #{node.roles.join ' '}" pre_classes = "programlisting prettyprint lang-#{lang}#{extra_classes}" [ %(<div class="pre_wrapper lang-#{lang}#{extra_classes}">), %(<div class="console_code_copy" title="Copy to clipboard"></div>), %(<pre class="#{pre_classes}">#{node.content || ''}</pre>), %(</div>), ].join "\n" end def convert_colist_item(item, index) [ '<tr>', convert_colist_item_head(item, index), convert_colist_item_body(item), '</tr>', ] end def convert_colist_item_head(item, index) [ '<td align="left" valign="top" width="5%">', "<p>#{convert_colist_item_coids item, index}</p>", '</td>', ] end def convert_colist_item_body(item) [ '<td align="left" valign="top">', "<p>#{item.text}</p>", item.blocks? ? item.content : nil, '</td>', ] end def convert_colist_item_coids(item, index) return '' unless (coids = item.attr 'coids') coids = coids.split(' ') return '' unless (first = coids.shift) [ %(<a href="##{first}">), %(<i class="conum" data-value="#{index + 1}"></i></a>), coids.map { |coid| %(<a href="##{coid}"></a>) }, ].compact.join end end end