diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index ea1b8a27..1e3b0595 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -511,10 +511,15 @@ module Gollum # # Returns the placeholder'd String data. def extract_code(data) - data.gsub!(/^([ \t]*)~~~ ?([^\r\n]+)?\r?\n(.+?)\r?\n\1~~~\r?$/m) do + data.gsub!(/^([ \t]*)(~~~+) ?([^\r\n]+)?\r?\n(.+?)\r?\n\1(~~~+)\r?$/m) do m_indent = $1 - m_lang = $2 - m_code = $3 + m_start = $2 # ~~~ + m_lang = $3 + m_code = $4 + m_end = $5 # ~~~ + + # start and finish tilde fence must be the same length + return '' if m_start.length != m_end.length lang = m_lang ? m_lang.strip : nil id = Digest::SHA1.hexdigest("#{lang}.#{m_code}") diff --git a/test/test_markup.rb b/test/test_markup.rb index 09b51ddc..57f06568 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -236,6 +236,19 @@ context "Markup" do assert_equal expected, output end + test "~~~ code blocks #537 with lots of tildes" do + page = 'test_rgx' + @wiki.write_page(page, :markdown, + %Q(~~~~~~ {#hi .ruby .sauce} +~~ +'hi'~ +~~~~~~ + ), commit_details) + output = @wiki.page(page).formatted_data + expected = %Q{
~~\n'hi'~\n