diff --git a/lib/rdoc/markdown.kpeg b/lib/rdoc/markdown.kpeg
index 5d428c9c80..46c8f07f41 100644
--- a/lib/rdoc/markdown.kpeg
+++ b/lib/rdoc/markdown.kpeg
@@ -501,6 +501,8 @@
# Wraps `text` in code markup for rdoc inline formatting
def code text
+ # trim even spaces
+ text = $2 while /\A( +|\t+)(.*)\1\z/ =~ text
# escape unescaped backslash at the end
backslash_at_end = "\\" if /(?#{text}#{backslash_at_end}"
@@ -1113,30 +1115,30 @@ Ticks3 = "```" !"`"
Ticks4 = "````" !"`"
Ticks5 = "`````" !"`"
-Code = ( Ticks1 @Sp < (
+Code = ( Ticks1 < (
( !"`" Nonspacechar )+ | !Ticks1 /`+/ |
- !( @Sp Ticks1 ) ( @Spacechar | @Newline !@BlankLine )
- )+ > @Sp Ticks1 |
- Ticks2 @Sp < (
+ !Ticks1 ( @Spacechar | @Newline !@BlankLine )
+ )+ > Ticks1 |
+ Ticks2 < (
( !"`" Nonspacechar )+ |
!Ticks2 /`+/ |
- !( @Sp Ticks2 ) ( @Spacechar | @Newline !@BlankLine )
- )+ > @Sp Ticks2 |
- Ticks3 @Sp < (
+ !Ticks2 ( @Spacechar | @Newline !@BlankLine )
+ )+ > Ticks2 |
+ Ticks3 < (
( !"`" Nonspacechar )+ |
!Ticks3 /`+/ |
- !( @Sp Ticks3 ) ( @Spacechar | @Newline !@BlankLine )
- )+ > @Sp Ticks3 |
- Ticks4 @Sp < (
+ !Ticks3 ( @Spacechar | @Newline !@BlankLine )
+ )+ > Ticks3 |
+ Ticks4 < (
( !"`" Nonspacechar )+ |
!Ticks4 /`+/ |
- !( @Sp Ticks4 ) ( @Spacechar | @Newline !@BlankLine )
- )+ > @Sp Ticks4 |
- Ticks5 @Sp < (
+ !Ticks4 ( @Spacechar | @Newline !@BlankLine )
+ )+ > Ticks4 |
+ Ticks5 < (
( !"`" Nonspacechar )+ |
!Ticks5 /`+/ |
- !( @Sp Ticks5 ) ( @Spacechar | @Newline !@BlankLine )
- )+ > @Sp Ticks5
+ !Ticks5 ( @Spacechar | @Newline !@BlankLine )
+ )+ > Ticks5
)
{ code text }
diff --git a/test/rdoc/rdoc_markdown_test.rb b/test/rdoc/rdoc_markdown_test.rb
index bd030da994..19eeb1c9ef 100644
--- a/test/rdoc/rdoc_markdown_test.rb
+++ b/test/rdoc/rdoc_markdown_test.rb
@@ -139,26 +139,74 @@ def test_parse_code
expected = doc(para("Code: text
"))
assert_equal expected, doc
+ doc = parse "Code: ` text`"
+ expected = doc(para("Code: text
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: `text `"
+ expected = doc(para("Code: text
"))
+ assert_equal expected, doc
+
doc = parse "Code: ` text `"
expected = doc(para("Code: text
"))
assert_equal expected, doc
+ doc = parse "Code: ` text\t`"
+ expected = doc(para("Code: text\t
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: `\ttext `"
+ expected = doc(para("Code: \ttext
"))
+ assert_equal expected, doc
+
doc = parse "Code: ``text`s``"
expected = doc(para("Code: text`s
"))
assert_equal expected, doc
+ doc = parse "Code: `` text`s``"
+ expected = doc(para("Code: text`s
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: ``text`s ``"
+ expected = doc(para("Code: text`s
"))
+ assert_equal expected, doc
+
doc = parse "Code: `` text`s ``"
expected = doc(para("Code: text`s
"))
assert_equal expected, doc
+ doc = parse "Code: `` text`s\t``"
+ expected = doc(para("Code: text`s\t
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: ``\ttext`s ``"
+ expected = doc(para("Code: \ttext`s
"))
+ assert_equal expected, doc
+
doc = parse "Code: ```text`s```"
expected = doc(para("Code: text`s
"))
assert_equal expected, doc
+ doc = parse "Code: ``` text`s```"
+ expected = doc(para("Code: text`s
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: ```text`s ```"
+ expected = doc(para("Code: text`s
"))
+ assert_equal expected, doc
+
doc = parse "Code: ``` text`s ```"
expected = doc(para("Code: text`s
"))
assert_equal expected, doc
+ doc = parse "Code: ``` text`s\t```"
+ expected = doc(para("Code: text`s\t
"))
+ assert_equal expected, doc
+
+ doc = parse "Code: ```\ttext`s ```"
+ expected = doc(para("Code: \ttext`s
"))
+ assert_equal expected, doc
+
doc = parse "Code: `\\`"
expected = doc(para("Code: \\\\
"))
assert_equal expected, doc
@@ -223,7 +271,7 @@ def test_parse_code_github_format
doc = <<-MD
Example:
-``` ruby
+```ruby
code goes here
```
MD
@@ -1201,14 +1249,14 @@ def test_gfm_table_with_backslashes_in_code_spans
body = [
['Plain', '$\\\\
', 'Should show backslash'],
- ['Escaped', '$\\\\
', 'Should show backslash'],
+ ['Escaped', '$\\\\
', 'Should show backslash'],
['Multiple', '\\\\n\\\\t
', 'Should show backslashes'],
]
expected_table = @RM::Table.new(head, align, body)
expected = doc(
- para('Plain text: $\\\\
and $\\\\
should work.'),
+ para('Plain text: $\\\\
and $\\\\
should work.'),
expected_table
)