From 60eda148b762103f5372760f287cd7c5508965c3 Mon Sep 17 00:00:00 2001 From: Andy Hayden Date: Mon, 11 Jan 2016 00:03:54 -0800 Subject: [PATCH] Fix rendering bug of Markdown Code. When a code block included a ```, it would not be rendered correctly. --- base/markdown/render/plain.jl | 7 +++++-- test/markdown.jl | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/base/markdown/render/plain.jl b/base/markdown/render/plain.jl index 237612495252f..020d705ce012e 100644 --- a/base/markdown/render/plain.jl +++ b/base/markdown/render/plain.jl @@ -20,9 +20,12 @@ function plain{l}(io::IO, header::Header{l}) end function plain(io::IO, code::Code) - println(io, "```", code.language) + # If the code includes a fenced block this will break parsing, + # so it must be enclosed by a longer ````-sequence. + n = mapreduce(length, max, 2, matchall(r"^`+"m, code.code)) + 1 + println(io, "`" ^ n, code.language) println(io, code.code) - println(io, "```") + println(io, "`" ^ n) end function plain(io::IO, p::Paragraph) diff --git a/test/markdown.jl b/test/markdown.jl index 7b573514cb386..bee0258cefff3 100644 --- a/test/markdown.jl +++ b/test/markdown.jl @@ -47,6 +47,14 @@ foo ``` """ == MD(LaTeX("...")) +code_in_code = md""" +```` +``` +```` +""" +@test code_in_code == MD(Code("```")) +@test plain(code_in_code) == "````\n```\n````\n" + @test md"A footnote [^foo]." == MD(Paragraph(["A footnote ", Footnote("foo", nothing), "."])) @test md"[^foo]: footnote" == MD(Paragraph([Footnote("foo", Any[" footnote"])]))