diff --git a/lib/rdoc/markdown.kpeg b/lib/rdoc/markdown.kpeg
index 174206ea74..5d428c9c80 100644
--- a/lib/rdoc/markdown.kpeg
+++ b/lib/rdoc/markdown.kpeg
@@ -497,6 +497,15 @@
end
end
+ ##
+ # Wraps `text` in code markup for rdoc inline formatting
+
+ def code text
+ # escape unescaped backslash at the end
+ backslash_at_end = "\\" if /(?#{text}#{backslash_at_end}"
+ end
+
##
# Parses inline markdown in table cells
@@ -1129,7 +1138,7 @@ Code = ( Ticks1 @Sp < (
!( @Sp Ticks5 ) ( @Spacechar | @Newline !@BlankLine )
)+ > @Sp Ticks5
)
- { "#{text}
" }
+ { code text }
RawHtml = < (HtmlComment | HtmlBlockScript | HtmlTag) >
{ if html? then text else '' end }
diff --git a/test/rdoc/rdoc_markdown_test.rb b/test/rdoc/rdoc_markdown_test.rb
index d33eec47f3..bd030da994 100644
--- a/test/rdoc/rdoc_markdown_test.rb
+++ b/test/rdoc/rdoc_markdown_test.rb
@@ -158,6 +158,34 @@ def test_parse_code
doc = parse "Code: ``` text`s ```"
expected = doc(para("Code: text`s
"))
assert_equal expected, doc
+
+ doc = parse "Code: `\\`"
+ expected = doc(para("Code: \\\\
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: ` \\ `"
+ expected = doc(para("Code: \\\\
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: `\\`s`"
+ expected = doc(para("Code: \\\\
s`"))
+ assert_equal expected, doc
+
+ doc = parse "Code: ``\\`s``"
+ expected = doc(para("Code: \\`s
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: `` \\`s ``"
+ expected = doc(para("Code: \\`s
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: ```\\`s```"
+ expected = doc(para("Code: \\`s
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: ``` \\`s ```"
+ expected = doc(para("Code: \\`s
"))
+ assert_equal expected, doc
end
def test_parse_code_github