diff --git a/base/markdown/render/plain.jl b/base/markdown/render/plain.jl index 7e6b40e64ab85..be279dab2394c 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 75fb6abfe0f1f..2e015f6b722dc 100644 --- a/test/markdown.jl +++ b/test/markdown.jl @@ -41,6 +41,14 @@ foo @test md"``code```more code``" == MD(Any[Paragraph(Any[Code("","code```more code")])]) @test md"``code``````more code``" == MD(Any[Paragraph(Any[Code("","code``````more code")])]) +code_in_code = md""" +```` +``` +```` +""" +@test code_in_code == MD(Code("```")) +@test plain(code_in_code) == "````\n```\n````\n" + @test md""" * one * two