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
4 changes: 2 additions & 2 deletions lib/rdoc/markdown.kpeg
Original file line number Diff line number Diff line change
Expand Up @@ -617,8 +617,8 @@ BlockQuote = BlockQuoteRaw:a

BlockQuoteRaw = @StartList:a
(( ">" " "? Line:l { a << l } )
( !">" !@BlankLine Line:c { a << c } )*
( @BlankLine:n { a << n } )*
( !">" !@BlankLine !AtxStart !Bullet !Enumerator !Ticks3 Line:c { a << c } )*
( ">" @BlankLine:n { a << n } )*
)+
{ inner_parse a.join }

Expand Down
126 changes: 100 additions & 26 deletions lib/rdoc/markdown.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1656,7 +1656,7 @@ def _BlockQuote
return _tmp
end

# BlockQuoteRaw = @StartList:a (">" " "? Line:l { a << l } (!">" !@BlankLine Line:c { a << c })* (@BlankLine:n { a << n })*)+ { inner_parse a.join }
# BlockQuoteRaw = @StartList:a (">" " "? Line:l { a << l } (!">" !@BlankLine !AtxStart !Bullet !Enumerator !Ticks3 Line:c { a << c })* (">" @BlankLine:n { a << n })*)+ { inner_parse a.join }
def _BlockQuoteRaw

_save = self.pos
Expand Down Expand Up @@ -1718,6 +1718,38 @@ def _BlockQuoteRaw
self.pos = _save5
break
end
_save8 = self.pos
_tmp = apply(:_AtxStart)
_tmp = _tmp ? nil : true
self.pos = _save8
unless _tmp
self.pos = _save5
break
end
_save9 = self.pos
_tmp = apply(:_Bullet)
_tmp = _tmp ? nil : true
self.pos = _save9
unless _tmp
self.pos = _save5
break
end
_save10 = self.pos
_tmp = apply(:_Enumerator)
_tmp = _tmp ? nil : true
self.pos = _save10
unless _tmp
self.pos = _save5
break
end
_save11 = self.pos
_tmp = apply(:_Ticks3)
_tmp = _tmp ? nil : true
self.pos = _save11
unless _tmp
self.pos = _save5
break
end
_tmp = apply(:_Line)
c = @result
unless _tmp
Expand All @@ -1741,18 +1773,23 @@ def _BlockQuoteRaw
end
while true

_save9 = self.pos
_save13 = self.pos
while true # sequence
_tmp = match_string(">")
unless _tmp
self.pos = _save13
break
end
_tmp = _BlankLine()
n = @result
unless _tmp
self.pos = _save9
self.pos = _save13
break
end
@result = begin; a << n ; end
_tmp = true
unless _tmp
self.pos = _save9
self.pos = _save13
end
break
end # end sequence
Expand All @@ -1769,65 +1806,97 @@ def _BlockQuoteRaw
if _tmp
while true

_save10 = self.pos
_save14 = self.pos
while true # sequence
_tmp = match_string(">")
unless _tmp
self.pos = _save10
self.pos = _save14
break
end
_save11 = self.pos
_save15 = self.pos
_tmp = match_string(" ")
unless _tmp
_tmp = true
self.pos = _save11
self.pos = _save15
end
unless _tmp
self.pos = _save10
self.pos = _save14
break
end
_tmp = apply(:_Line)
l = @result
unless _tmp
self.pos = _save10
self.pos = _save14
break
end
@result = begin; a << l ; end
_tmp = true
unless _tmp
self.pos = _save10
self.pos = _save14
break
end
while true

_save13 = self.pos
_save17 = self.pos
while true # sequence
_save14 = self.pos
_save18 = self.pos
_tmp = match_string(">")
_tmp = _tmp ? nil : true
self.pos = _save14
self.pos = _save18
unless _tmp
self.pos = _save13
self.pos = _save17
break
end
_save15 = self.pos
_save19 = self.pos
_tmp = _BlankLine()
_tmp = _tmp ? nil : true
self.pos = _save15
self.pos = _save19
unless _tmp
self.pos = _save17
break
end
_save20 = self.pos
_tmp = apply(:_AtxStart)
_tmp = _tmp ? nil : true
self.pos = _save20
unless _tmp
self.pos = _save17
break
end
_save21 = self.pos
_tmp = apply(:_Bullet)
_tmp = _tmp ? nil : true
self.pos = _save21
unless _tmp
self.pos = _save17
break
end
_save22 = self.pos
_tmp = apply(:_Enumerator)
_tmp = _tmp ? nil : true
self.pos = _save22
unless _tmp
self.pos = _save17
break
end
_save23 = self.pos
_tmp = apply(:_Ticks3)
_tmp = _tmp ? nil : true
self.pos = _save23
unless _tmp
self.pos = _save13
self.pos = _save17
break
end
_tmp = apply(:_Line)
c = @result
unless _tmp
self.pos = _save13
self.pos = _save17
break
end
@result = begin; a << c ; end
_tmp = true
unless _tmp
self.pos = _save13
self.pos = _save17
end
break
end # end sequence
Expand All @@ -1836,23 +1905,28 @@ def _BlockQuoteRaw
end
_tmp = true
unless _tmp
self.pos = _save10
self.pos = _save14
break
end
while true

_save17 = self.pos
_save25 = self.pos
while true # sequence
_tmp = match_string(">")
unless _tmp
self.pos = _save25
break
end
_tmp = _BlankLine()
n = @result
unless _tmp
self.pos = _save17
self.pos = _save25
break
end
@result = begin; a << n ; end
_tmp = true
unless _tmp
self.pos = _save17
self.pos = _save25
end
break
end # end sequence
Expand All @@ -1861,7 +1935,7 @@ def _BlockQuoteRaw
end
_tmp = true
unless _tmp
self.pos = _save10
self.pos = _save14
end
break
end # end sequence
Expand Down Expand Up @@ -16457,7 +16531,7 @@ def _DefinitionListDefinition
Rules[:_SetextHeading2] = rule_info("SetextHeading2", "&(@RawLine SetextBottom2) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom2 { RDoc::Markup::Heading.new(2, a.join) }")
Rules[:_Heading] = rule_info("Heading", "(SetextHeading | AtxHeading)")
Rules[:_BlockQuote] = rule_info("BlockQuote", "BlockQuoteRaw:a { RDoc::Markup::BlockQuote.new(*a) }")
Rules[:_BlockQuoteRaw] = rule_info("BlockQuoteRaw", "@StartList:a (\">\" \" \"? Line:l { a << l } (!\">\" !@BlankLine Line:c { a << c })* (@BlankLine:n { a << n })*)+ { inner_parse a.join }")
Rules[:_BlockQuoteRaw] = rule_info("BlockQuoteRaw", "@StartList:a (\">\" \" \"? Line:l { a << l } (!\">\" !@BlankLine !AtxStart !Bullet !Enumerator !Ticks3 Line:c { a << c })* (\">\" @BlankLine:n { a << n })*)+ { inner_parse a.join }")
Rules[:_NonblankIndentedLine] = rule_info("NonblankIndentedLine", "!@BlankLine IndentedLine")
Rules[:_VerbatimChunk] = rule_info("VerbatimChunk", "@BlankLine*:a NonblankIndentedLine+:b { a.concat b }")
Rules[:_Verbatim] = rule_info("Verbatim", "VerbatimChunk+:a { RDoc::Markup::Verbatim.new(*a.flatten) }")
Expand Down
67 changes: 66 additions & 1 deletion test/rdoc/rdoc_markdown_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,77 @@ def test_parse_block_quote_separate
expected =
doc(
block(
para("this is\na block quote"),
para("this is\na block quote")),
block(
para("that continues")))

assert_equal expected, doc
end

def test_parse_block_quote_no_lazy_continuation_for_list
doc = parse <<-BLOCK_QUOTE
> foo
- bar
BLOCK_QUOTE

expected =
doc(
block(
para("foo")),
list(:BULLET,
item(nil, para("bar"))))

assert_equal expected, doc
end

def test_parse_block_quote_no_lazy_continuation_for_ordered_list
doc = parse <<-BLOCK_QUOTE
> foo
1. bar
BLOCK_QUOTE

expected =
doc(
block(
para("foo")),
list(:NUMBER,
item(nil, para("bar"))))

assert_equal expected, doc
end

def test_parse_block_quote_no_lazy_continuation_for_heading
doc = parse <<-BLOCK_QUOTE
> foo
# bar
BLOCK_QUOTE

expected =
doc(
block(
para("foo")),
head(1, "bar"))

assert_equal expected, doc
end

def test_parse_block_quote_no_lazy_continuation_for_code_fence
doc = parse <<~BLOCK_QUOTE
> foo
```
code
```
BLOCK_QUOTE

expected =
doc(
block(
para("foo")),
verb("code\n"))

assert_equal expected, doc
end

def test_parse_char_entity
doc = parse '&pi; &nn;'

Expand Down