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.
# File railties/guides/rails_guides/generator.rb, line 208
def with_workaround_for_notextile(body)
code_blocks = []
body.gsub!(%{<(yaml|shell|ruby|erb|html|sql|plain)>(.*?)</\11>>}) 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
else
'plain'
end
code_blocks.push(<notextile><div class="code_container"><pre class="brush: #{brush}; gutter: false; toolbar: false">#{ERB::Util.h($2).strip}</pre></div></notextile>)
"\ndirty_workaround_for_notextile_#{code_blocks.size - 1}\n"
end
body = yield body
body.gsub(%{<p>dirty_workaround_for_notextile_(\d+)</p>}) do |_|
code_blocks[$1.to_i]
end
end