diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 2a78bbbf..ac9fe921 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -347,7 +347,7 @@ module Gollum # # Returns the placeholder'd String data. def extract_code(data) - data.gsub(/^``` ?(.+?)\r?\n(.+?)\r?\n```\r?$/m) do + data.gsub(/^``` ?([^\r\n]+)?\r?\n(.+?)\r?\n```\r?$/m) do id = Digest::SHA1.hexdigest($2) @codemap[id] = { :lang => $1, :code => $2 } id @@ -362,12 +362,15 @@ module Gollum # Returns the marked up String data. def process_code(data) @codemap.each do |id, spec| - lang = spec[:lang] code = spec[:code] if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ } code.gsub!(/^( |\t)/m, '') end - data.gsub!(id, Gollum::Albino.new(code, lang).colorize) + if lang = spec[:lang] + data.gsub!(id, Gollum::Albino.new(code, lang).colorize) + else + data.gsub!(id, "
#{CGI.escapeHTML(code)}
") + end end data end diff --git a/test/test_markup.rb b/test/test_markup.rb index 3b9ecb91..6dec20be 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -360,8 +360,8 @@ context "Markup" do end test "code block with no lang" do - content = "a\n\n```\n\tls -al;\n\tbooya\n```\n\nb" - output = "

a

\n\n\n\n

b

" + content = "a\n\n```\n\tls -al;\n\t\n```\n\nb" + output = "

a

\n\n
ls -al;\n<booya>
\n\n

b

" compare(content, output) end