From 0551151e415046f51f93ffa0abe533cb41a20b39 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 12 Aug 2025 01:27:48 +0900 Subject: [PATCH 1/2] Trim even spaces only in code Fix #1403 --- lib/rdoc/markdown.kpeg | 32 +++++++++++++++++--------------- test/rdoc/rdoc_markdown_test.rb | 30 +++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 18 deletions(-) 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..26e5190b57 100644 --- a/test/rdoc/rdoc_markdown_test.rb +++ b/test/rdoc/rdoc_markdown_test.rb @@ -139,6 +139,14 @@ 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 @@ -147,6 +155,14 @@ def test_parse_code 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 @@ -155,6 +171,14 @@ def test_parse_code 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 @@ -223,7 +247,7 @@ def test_parse_code_github_format doc = <<-MD Example: -``` ruby +```ruby code goes here ``` MD @@ -1201,14 +1225,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 ) From 268ff774be43e68905fee806467551e3e5235428 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Tue, 12 Aug 2025 12:45:17 +0900 Subject: [PATCH 2/2] Tests for code enclosing a tab and a space --- test/rdoc/rdoc_markdown_test.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/rdoc/rdoc_markdown_test.rb b/test/rdoc/rdoc_markdown_test.rb index 26e5190b57..19eeb1c9ef 100644 --- a/test/rdoc/rdoc_markdown_test.rb +++ b/test/rdoc/rdoc_markdown_test.rb @@ -151,6 +151,14 @@ def test_parse_code 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 @@ -167,6 +175,14 @@ def test_parse_code 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 @@ -183,6 +199,14 @@ def test_parse_code 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