Skip to content

Commit fbf643c

Browse files
committed
Escape unescaped backslash at the end of code
Fix #1402
1 parent 39f5a2d commit fbf643c

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

lib/rdoc/markdown.kpeg

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,15 @@
497497
end
498498
end
499499

500+
##
501+
# Wraps `text` in code markup for rdoc inline formatting
502+
503+
def code text
504+
# escape unescaped backslash at the end
505+
backslash_at_end = "\\" if /(?<!\\)(?:\\\\)*\\\z/.match?(text)
506+
"<code>#{text}#{backslash_at_end}</code>"
507+
end
508+
500509
##
501510
# Parses inline markdown in table cells
502511

@@ -1129,7 +1138,7 @@ Code = ( Ticks1 @Sp < (
11291138
!( @Sp Ticks5 ) ( @Spacechar | @Newline !@BlankLine )
11301139
)+ > @Sp Ticks5
11311140
)
1132-
{ "<code>#{text}</code>" }
1141+
{ code text }
11331142

11341143
RawHtml = < (HtmlComment | HtmlBlockScript | HtmlTag) >
11351144
{ if html? then text else '' end }

test/rdoc/rdoc_markdown_test.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,34 @@ def test_parse_code
158158
doc = parse "Code: ``` text`s ```"
159159
expected = doc(para("Code: <code>text`s</code>"))
160160
assert_equal expected, doc
161+
162+
doc = parse "Code: `\\`"
163+
expected = doc(para("Code: <code>\\\\</code>"))
164+
assert_equal expected, doc
165+
166+
doc = parse "Code: ` \\ `"
167+
expected = doc(para("Code: <code>\\\\</code>"))
168+
assert_equal expected, doc
169+
170+
doc = parse "Code: `\\`s`"
171+
expected = doc(para("Code: <code>\\\\</code>s`"))
172+
assert_equal expected, doc
173+
174+
doc = parse "Code: ``\\`s``"
175+
expected = doc(para("Code: <code>\\`s</code>"))
176+
assert_equal expected, doc
177+
178+
doc = parse "Code: `` \\`s ``"
179+
expected = doc(para("Code: <code>\\`s</code>"))
180+
assert_equal expected, doc
181+
182+
doc = parse "Code: ```\\`s```"
183+
expected = doc(para("Code: <code>\\`s</code>"))
184+
assert_equal expected, doc
185+
186+
doc = parse "Code: ``` \\`s ```"
187+
expected = doc(para("Code: <code>\\`s</code>"))
188+
assert_equal expected, doc
161189
end
162190

163191
def test_parse_code_github

0 commit comments

Comments
 (0)