def with_workaround_for_notextile(body)
      code_blocks = []

      body.gsub!(%r{<(#{JaxGuides.code_aliases})>(.*?)</\1>}m) do |m|
        brush = case $1
#          when 'ruby', 'sql', 'plain'
#            $1
          when 'erb'
            'ruby; html-script: true'
          when 'html'
            'xml' # html is understood, but there are .xml rules in the CSS
          when 'yaml', 'shell'
            'plain'
          else
            $1
            #'plain'
        end

        code_blocks.push(<<HTML)
<notextile>
<div class="code_container">
<pre class="brush: #{brush}; gutter: false; toolbar: false">
#{ERB::Util.h($2).strip}
</pre>
</div>
</notextile>
HTML
        "\ndirty_workaround_for_notextile_#{code_blocks.size - 1}\n"
      end

      body = yield body

      body.gsub(%r{<p>dirty_workaround_for_notextile_(\d+)</p>}) do |_|
        code_blocks[$1.to_i]
      end
    end
def with_workaround_for_notextile(body)
      code_blocks = []

      body.gsub!(%r{<(#{JaxGuides.code_aliases})>(.*?)</\1>}m) do |m|
        brush = case $1
#          when 'ruby', 'sql', 'plain'
#            $1
          when 'erb'
            'ruby; html-script: true'
          when 'html'
            'xml' # html is understood, but there are .xml rules in the CSS
          when 'yaml', 'shell'
            'plain'
          else
            $1
            #'plain'
        end

        code_blocks.push(<<HTML)
<notextile>
<div class="code_container">
<pre class="brush: #{brush}; gutter: false; toolbar: false">
#{ERB::Util.h($2).strip}
</pre>
</div>
</notextile>
HTML
        "\ndirty_workaround_for_notextile_#{code_blocks.size - 1}\n"
      end

      body = yield body

      body.gsub(%r{<p>dirty_workaround_for_notextile_(\d+)</p>}) do |_|
        code_blocks[$1.to_i]
      end
    end
For some reason the notextile tag does not always turn off textile. See
 LH ticket of the security guide (#7). As a temporary workaround we deal
 with code blocks by hand.