Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/rdoc/markdown.kpeg
Original file line number Diff line number Diff line change
Expand Up @@ -1249,7 +1249,7 @@ RawNoteBlock = @StartList:a
# Markdown extensions added by RDoc follow

CodeFence = &{ github? }
Ticks3 (@Sp StrChunk:format)? Spnl < (
Ticks3 (@Sp StrChunk:format)? @Sp @Newline? < (
( !"`" Nonspacechar )+ |
!Ticks3 /`+/ |
Spacechar |
Expand Down
108 changes: 59 additions & 49 deletions lib/rdoc/markdown.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15570,7 +15570,7 @@ def _RawNoteBlock
return _tmp
end

# CodeFence = &{ github? } Ticks3 (@Sp StrChunk:format)? Spnl < ((!"`" Nonspacechar)+ | !Ticks3 /`+/ | Spacechar | @Newline)+ > Ticks3 @Sp @Newline* { verbatim = RDoc::Markup::Verbatim.new text verbatim.format = format.intern if format.instance_of?(String) verbatim }
# CodeFence = &{ github? } Ticks3 (@Sp StrChunk:format)? @Sp @Newline? < ((!"`" Nonspacechar)+ | !Ticks3 /`+/ | Spacechar | @Newline)+ > Ticks3 @Sp @Newline* { verbatim = RDoc::Markup::Verbatim.new text verbatim.format = format.intern if format.instance_of?(String) verbatim }
def _CodeFence

_save = self.pos
Expand Down Expand Up @@ -15612,51 +15612,61 @@ def _CodeFence
self.pos = _save
break
end
_tmp = apply(:_Spnl)
_tmp = _Sp()
unless _tmp
self.pos = _save
break
end
_text_start = self.pos
_save4 = self.pos

_tmp = _Newline()
unless _tmp
_tmp = true
self.pos = _save4
end
unless _tmp
self.pos = _save
break
end
_text_start = self.pos
_save5 = self.pos
while true # choice
_save6 = self.pos

_save6 = self.pos
while true # choice
_save7 = self.pos

_save8 = self.pos
while true # sequence
_save8 = self.pos
_save9 = self.pos
_tmp = match_string("`")
_tmp = _tmp ? nil : true
self.pos = _save8
self.pos = _save9
unless _tmp
self.pos = _save7
self.pos = _save8
break
end
_tmp = apply(:_Nonspacechar)
unless _tmp
self.pos = _save7
self.pos = _save8
end
break
end # end sequence

if _tmp
while true

_save9 = self.pos
_save10 = self.pos
while true # sequence
_save10 = self.pos
_save11 = self.pos
_tmp = match_string("`")
_tmp = _tmp ? nil : true
self.pos = _save10
self.pos = _save11
unless _tmp
self.pos = _save9
self.pos = _save10
break
end
_tmp = apply(:_Nonspacechar)
unless _tmp
self.pos = _save9
self.pos = _save10
end
break
end # end sequence
Expand All @@ -15665,79 +15675,79 @@ def _CodeFence
end
_tmp = true
else
self.pos = _save6
self.pos = _save7
end
break if _tmp
self.pos = _save5
self.pos = _save6

_save11 = self.pos
_save12 = self.pos
while true # sequence
_save12 = self.pos
_save13 = self.pos
_tmp = apply(:_Ticks3)
_tmp = _tmp ? nil : true
self.pos = _save12
self.pos = _save13
unless _tmp
self.pos = _save11
self.pos = _save12
break
end
_tmp = scan(/\G(?-mix:`+)/)
unless _tmp
self.pos = _save11
self.pos = _save12
end
break
end # end sequence

break if _tmp
self.pos = _save5
self.pos = _save6
_tmp = apply(:_Spacechar)
break if _tmp
self.pos = _save5
self.pos = _save6
_tmp = _Newline()
break if _tmp
self.pos = _save5
self.pos = _save6
break
end # end choice

if _tmp
while true

_save13 = self.pos
_save14 = self.pos
while true # choice
_save14 = self.pos

_save15 = self.pos

_save16 = self.pos
while true # sequence
_save16 = self.pos
_save17 = self.pos
_tmp = match_string("`")
_tmp = _tmp ? nil : true
self.pos = _save16
self.pos = _save17
unless _tmp
self.pos = _save15
self.pos = _save16
break
end
_tmp = apply(:_Nonspacechar)
unless _tmp
self.pos = _save15
self.pos = _save16
end
break
end # end sequence

if _tmp
while true

_save17 = self.pos
_save18 = self.pos
while true # sequence
_save18 = self.pos
_save19 = self.pos
_tmp = match_string("`")
_tmp = _tmp ? nil : true
self.pos = _save18
self.pos = _save19
unless _tmp
self.pos = _save17
self.pos = _save18
break
end
_tmp = apply(:_Nonspacechar)
unless _tmp
self.pos = _save17
self.pos = _save18
end
break
end # end sequence
Expand All @@ -15746,44 +15756,44 @@ def _CodeFence
end
_tmp = true
else
self.pos = _save14
self.pos = _save15
end
break if _tmp
self.pos = _save13
self.pos = _save14

_save19 = self.pos
_save20 = self.pos
while true # sequence
_save20 = self.pos
_save21 = self.pos
_tmp = apply(:_Ticks3)
_tmp = _tmp ? nil : true
self.pos = _save20
self.pos = _save21
unless _tmp
self.pos = _save19
self.pos = _save20
break
end
_tmp = scan(/\G(?-mix:`+)/)
unless _tmp
self.pos = _save19
self.pos = _save20
end
break
end # end sequence

break if _tmp
self.pos = _save13
self.pos = _save14
_tmp = apply(:_Spacechar)
break if _tmp
self.pos = _save13
self.pos = _save14
_tmp = _Newline()
break if _tmp
self.pos = _save13
self.pos = _save14
break
end # end choice

break unless _tmp
end
_tmp = true
else
self.pos = _save4
self.pos = _save5
end
if _tmp
text = get_text(_text_start)
Expand Down Expand Up @@ -16677,7 +16687,7 @@ def _DefinitionListDefinition
Rules[:_InlineNote] = rule_info("InlineNote", "&{ notes? } \"^[\" @StartList:a (!\"]\" Inline:l { a << l })+ \"]\" { ref = [:inline, @note_order.length] @footnotes[ref] = paragraph a note_for ref }")
Rules[:_Notes] = rule_info("Notes", "(Note | SkipBlock)*")
Rules[:_RawNoteBlock] = rule_info("RawNoteBlock", "@StartList:a (!@BlankLine !RawNoteReference OptionallyIndentedLine:l { a << l })+ < @BlankLine* > { a << text } { a }")
Rules[:_CodeFence] = rule_info("CodeFence", "&{ github? } Ticks3 (@Sp StrChunk:format)? Spnl < ((!\"`\" Nonspacechar)+ | !Ticks3 /`+/ | Spacechar | @Newline)+ > Ticks3 @Sp @Newline* { verbatim = RDoc::Markup::Verbatim.new text verbatim.format = format.intern if format.instance_of?(String) verbatim }")
Rules[:_CodeFence] = rule_info("CodeFence", "&{ github? } Ticks3 (@Sp StrChunk:format)? @Sp @Newline? < ((!\"`\" Nonspacechar)+ | !Ticks3 /`+/ | Spacechar | @Newline)+ > Ticks3 @Sp @Newline* { verbatim = RDoc::Markup::Verbatim.new text verbatim.format = format.intern if format.instance_of?(String) verbatim }")
Rules[:_Table] = rule_info("Table", "&{ github? } TableHead:header TableLine:line TableRow+:body { table = RDoc::Markup::Table.new(header, line, body) parse_table_cells(table) }")
Rules[:_TableHead] = rule_info("TableHead", "TableItem2+:items \"|\"? @Newline { items }")
Rules[:_TableRow] = rule_info("TableRow", "((TableItem:item1 TableItem2+:items { [item1, *items] }):row | TableItem2+:row) \"|\"? @Newline { row }")
Expand Down
15 changes: 15 additions & 0 deletions test/rdoc/rdoc_markdown_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1242,6 +1242,21 @@ def test_code_fence_with_unintended_array
assert_equal expected, doc
end

def test_code_fence_preserves_text_indentation
doc = parse <<~MD
```ruby
foo()
bar()
```
MD

expected = doc(
verb(" foo()\n bar()\n").tap { |v| v.format = :ruby }
)

assert_equal expected, doc
end

def test_gfm_table
doc = parse <<~MD
| | |compare-ruby|built-ruby|
Expand Down