diff options
author | Nobuyoshi Nakada <[email protected]> | 2021-02-22 21:34:11 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2021-03-16 15:47:27 +0900 |
commit | de8e6218a3257fe19b46ff0aa157e66f452ac8b7 (patch) | |
tree | 2b0f8e75fb054cde17923f6e2e69ba82eec832ec /lib/rdoc | |
parent | 10b082064e6ab0943cce4ef43e567d8044c7096d (diff) |
[ruby/rdoc] Fixed CodeFence without blank lines
Currently a fenced code block needs a preceding blank line, it
should not be required, as:
https://github.github.com/gfm/#fenced-code-blocks
> A fenced code block may interrupt a paragraph, and does not
> require a blank line either before or after.
Just recommended:
https://docs.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks
> We recommend placing a blank line before and after code blocks
> to make the raw formatting easier to read.
https://github.com/ruby/rdoc/commit/0e1776caf3
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/4274
Diffstat (limited to 'lib/rdoc')
-rw-r--r-- | lib/rdoc/markdown.rb | 447 |
1 files changed, 80 insertions, 367 deletions
diff --git a/lib/rdoc/markdown.rb b/lib/rdoc/markdown.rb index d9bfbd38fb..6ede5bea55 100644 --- a/lib/rdoc/markdown.rb +++ b/lib/rdoc/markdown.rb @@ -897,7 +897,7 @@ class RDoc::Markdown return _tmp end - # Block = @BlankLine* (BlockQuote | Verbatim | CodeFence | Table | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain) + # Block = @BlankLine* (BlockQuote | Verbatim | CodeFence | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain) def _Block _save = self.pos @@ -923,9 +923,6 @@ class RDoc::Markdown _tmp = apply(:_CodeFence) break if _tmp self.pos = _save2 - _tmp = apply(:_Table) - break if _tmp - self.pos = _save2 _tmp = apply(:_Note) break if _tmp self.pos = _save2 @@ -9323,7 +9320,7 @@ class RDoc::Markdown return _tmp end - # Inlines = (!@Endline Inline:i { i } | @Endline:c &Inline { c })+:chunks @Endline? { chunks } + # Inlines = (!@Endline Inline:i { i } | @Endline:c !(&{ github? } Ticks3 /[^`\n]*$/) &Inline { c })+:chunks @Endline? { chunks } def _Inlines _save = self.pos @@ -9370,12 +9367,41 @@ class RDoc::Markdown break end _save6 = self.pos - _tmp = apply(:_Inline) + + _save7 = self.pos + while true # sequence + _save8 = self.pos + _tmp = begin; github? ; end + self.pos = _save8 + unless _tmp + self.pos = _save7 + break + end + _tmp = apply(:_Ticks3) + unless _tmp + self.pos = _save7 + break + end + _tmp = scan(/\A(?-mix:[^`\n]*$)/) + unless _tmp + self.pos = _save7 + end + break + end # end sequence + + _tmp = _tmp ? nil : true self.pos = _save6 unless _tmp self.pos = _save5 break end + _save9 = self.pos + _tmp = apply(:_Inline) + self.pos = _save9 + unless _tmp + self.pos = _save5 + break + end @result = begin; c ; end _tmp = true unless _tmp @@ -9393,61 +9419,90 @@ class RDoc::Markdown _ary << @result while true - _save7 = self.pos + _save10 = self.pos while true # choice - _save8 = self.pos + _save11 = self.pos while true # sequence - _save9 = self.pos + _save12 = self.pos _tmp = _Endline() _tmp = _tmp ? nil : true - self.pos = _save9 + self.pos = _save12 unless _tmp - self.pos = _save8 + self.pos = _save11 break end _tmp = apply(:_Inline) i = @result unless _tmp - self.pos = _save8 + self.pos = _save11 break end @result = begin; i ; end _tmp = true unless _tmp - self.pos = _save8 + self.pos = _save11 end break end # end sequence break if _tmp - self.pos = _save7 + self.pos = _save10 - _save10 = self.pos + _save13 = self.pos while true # sequence _tmp = _Endline() c = @result unless _tmp - self.pos = _save10 + self.pos = _save13 break end - _save11 = self.pos + _save14 = self.pos + + _save15 = self.pos + while true # sequence + _save16 = self.pos + _tmp = begin; github? ; end + self.pos = _save16 + unless _tmp + self.pos = _save15 + break + end + _tmp = apply(:_Ticks3) + unless _tmp + self.pos = _save15 + break + end + _tmp = scan(/\A(?-mix:[^`\n]*$)/) + unless _tmp + self.pos = _save15 + end + break + end # end sequence + + _tmp = _tmp ? nil : true + self.pos = _save14 + unless _tmp + self.pos = _save13 + break + end + _save17 = self.pos _tmp = apply(:_Inline) - self.pos = _save11 + self.pos = _save17 unless _tmp - self.pos = _save10 + self.pos = _save13 break end @result = begin; c ; end _tmp = true unless _tmp - self.pos = _save10 + self.pos = _save13 end break end # end sequence break if _tmp - self.pos = _save7 + self.pos = _save10 break end # end choice @@ -9464,11 +9519,11 @@ class RDoc::Markdown self.pos = _save break end - _save12 = self.pos + _save18 = self.pos _tmp = _Endline() unless _tmp _tmp = true - self.pos = _save12 + self.pos = _save18 end unless _tmp self.pos = _save @@ -15850,343 +15905,6 @@ class RDoc::Markdown return _tmp end - # Table = &{ github? } TableRow:header TableLine:line TableRow+:body { table = RDoc::Markup::Table.new(header, line, body) } - def _Table - - _save = self.pos - while true # sequence - _save1 = self.pos - _tmp = begin; github? ; end - self.pos = _save1 - unless _tmp - self.pos = _save - break - end - _tmp = apply(:_TableRow) - header = @result - unless _tmp - self.pos = _save - break - end - _tmp = apply(:_TableLine) - line = @result - unless _tmp - self.pos = _save - break - end - _save2 = self.pos - _ary = [] - _tmp = apply(:_TableRow) - if _tmp - _ary << @result - while true - _tmp = apply(:_TableRow) - _ary << @result if _tmp - break unless _tmp - end - _tmp = true - @result = _ary - else - self.pos = _save2 - end - body = @result - unless _tmp - self.pos = _save - break - end - @result = begin; table = RDoc::Markup::Table.new(header, line, body) ; end - _tmp = true - unless _tmp - self.pos = _save - end - break - end # end sequence - - set_failed_rule :_Table unless _tmp - return _tmp - end - - # TableRow = < TableItem+:row > "|" @Newline { row } - def _TableRow - - _save = self.pos - while true # sequence - _text_start = self.pos - _save1 = self.pos - _ary = [] - _tmp = apply(:_TableItem) - if _tmp - _ary << @result - while true - _tmp = apply(:_TableItem) - _ary << @result if _tmp - break unless _tmp - end - _tmp = true - @result = _ary - else - self.pos = _save1 - end - row = @result - if _tmp - text = get_text(_text_start) - end - unless _tmp - self.pos = _save - break - end - _tmp = match_string("|") - unless _tmp - self.pos = _save - break - end - _tmp = _Newline() - unless _tmp - self.pos = _save - break - end - @result = begin; row ; end - _tmp = true - unless _tmp - self.pos = _save - end - break - end # end sequence - - set_failed_rule :_TableRow unless _tmp - return _tmp - end - - # TableItem = "|" < (!"|" !@Newline .)+ > { text.strip } - def _TableItem - - _save = self.pos - while true # sequence - _tmp = match_string("|") - unless _tmp - self.pos = _save - break - end - _text_start = self.pos - _save1 = self.pos - - _save2 = self.pos - while true # sequence - _save3 = self.pos - _tmp = match_string("|") - _tmp = _tmp ? nil : true - self.pos = _save3 - unless _tmp - self.pos = _save2 - break - end - _save4 = self.pos - _tmp = _Newline() - _tmp = _tmp ? nil : true - self.pos = _save4 - unless _tmp - self.pos = _save2 - break - end - _tmp = get_byte - unless _tmp - self.pos = _save2 - end - break - end # end sequence - - if _tmp - while true - - _save5 = self.pos - while true # sequence - _save6 = self.pos - _tmp = match_string("|") - _tmp = _tmp ? nil : true - self.pos = _save6 - unless _tmp - self.pos = _save5 - break - end - _save7 = self.pos - _tmp = _Newline() - _tmp = _tmp ? nil : true - self.pos = _save7 - unless _tmp - self.pos = _save5 - break - end - _tmp = get_byte - unless _tmp - self.pos = _save5 - end - break - end # end sequence - - break unless _tmp - end - _tmp = true - else - self.pos = _save1 - end - if _tmp - text = get_text(_text_start) - end - unless _tmp - self.pos = _save - break - end - @result = begin; text.strip ; end - _tmp = true - unless _tmp - self.pos = _save - end - break - end # end sequence - - set_failed_rule :_TableItem unless _tmp - return _tmp - end - - # TableLine = TableColumn+:line "|" @Newline { line } - def _TableLine - - _save = self.pos - while true # sequence - _save1 = self.pos - _ary = [] - _tmp = apply(:_TableColumn) - if _tmp - _ary << @result - while true - _tmp = apply(:_TableColumn) - _ary << @result if _tmp - break unless _tmp - end - _tmp = true - @result = _ary - else - self.pos = _save1 - end - line = @result - unless _tmp - self.pos = _save - break - end - _tmp = match_string("|") - unless _tmp - self.pos = _save - break - end - _tmp = _Newline() - unless _tmp - self.pos = _save - break - end - @result = begin; line ; end - _tmp = true - unless _tmp - self.pos = _save - end - break - end # end sequence - - set_failed_rule :_TableLine unless _tmp - return _tmp - end - - # TableColumn = "|" < ("-"+ ":"? | ":" "-"*) > { text.start_with?(":") ? :left : text.end_with?(":") ? :right : nil } - def _TableColumn - - _save = self.pos - while true # sequence - _tmp = match_string("|") - unless _tmp - self.pos = _save - break - end - _text_start = self.pos - - _save1 = self.pos - while true # choice - - _save2 = self.pos - while true # sequence - _save3 = self.pos - _tmp = match_string("-") - if _tmp - while true - _tmp = match_string("-") - break unless _tmp - end - _tmp = true - else - self.pos = _save3 - end - unless _tmp - self.pos = _save2 - break - end - _save4 = self.pos - _tmp = match_string(":") - unless _tmp - _tmp = true - self.pos = _save4 - end - unless _tmp - self.pos = _save2 - end - break - end # end sequence - - break if _tmp - self.pos = _save1 - - _save5 = self.pos - while true # sequence - _tmp = match_string(":") - unless _tmp - self.pos = _save5 - break - end - while true - _tmp = match_string("-") - break unless _tmp - end - _tmp = true - unless _tmp - self.pos = _save5 - end - break - end # end sequence - - break if _tmp - self.pos = _save1 - break - end # end choice - - if _tmp - text = get_text(_text_start) - end - unless _tmp - self.pos = _save - break - end - @result = begin; - text.start_with?(":") ? :left : - text.end_with?(":") ? :right : nil - ; end - _tmp = true - unless _tmp - self.pos = _save - end - break - end # end sequence - - set_failed_rule :_TableColumn unless _tmp - return _tmp - end - # DefinitionList = &{ definition_lists? } DefinitionListItem+:list { RDoc::Markup::List.new :NOTE, *list.flatten } def _DefinitionList @@ -16386,7 +16104,7 @@ class RDoc::Markdown Rules = {} Rules[:_root] = rule_info("root", "Doc") Rules[:_Doc] = rule_info("Doc", "BOM? Block*:a { RDoc::Markup::Document.new(*a.compact) }") - Rules[:_Block] = rule_info("Block", "@BlankLine* (BlockQuote | Verbatim | CodeFence | Table | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain)") + Rules[:_Block] = rule_info("Block", "@BlankLine* (BlockQuote | Verbatim | CodeFence | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain)") Rules[:_Para] = rule_info("Para", "@NonindentSpace Inlines:a @BlankLine+ { paragraph a }") Rules[:_Plain] = rule_info("Plain", "Inlines:a { paragraph a }") Rules[:_AtxInline] = rule_info("AtxInline", "!@Newline !(@Sp /\#*/ @Sp @Newline) Inline") @@ -16530,7 +16248,7 @@ class RDoc::Markdown Rules[:_StyleClose] = rule_info("StyleClose", "\"<\" Spnl \"/\" (\"style\" | \"STYLE\") Spnl \">\"") Rules[:_InStyleTags] = rule_info("InStyleTags", "StyleOpen (!StyleClose .)* StyleClose") Rules[:_StyleBlock] = rule_info("StyleBlock", "< InStyleTags > @BlankLine* { if css? then RDoc::Markup::Raw.new text end }") - Rules[:_Inlines] = rule_info("Inlines", "(!@Endline Inline:i { i } | @Endline:c &Inline { c })+:chunks @Endline? { chunks }") + Rules[:_Inlines] = rule_info("Inlines", "(!@Endline Inline:i { i } | @Endline:c !(&{ github? } Ticks3 /[^`\\n]*$/) &Inline { c })+:chunks @Endline? { chunks }") Rules[:_Inline] = rule_info("Inline", "(Str | @Endline | UlOrStarLine | @Space | Strong | Emph | Strike | Image | Link | NoteReference | InlineNote | Code | RawHtml | Entity | EscapedChar | Symbol)") Rules[:_Space] = rule_info("Space", "@Spacechar+ { \" \" }") Rules[:_Str] = rule_info("Str", "@StartList:a < @NormalChar+ > { a = text } (StrChunk:c { a << c })* { a }") @@ -16619,11 +16337,6 @@ class RDoc::Markdown Rules[:_Notes] = rule_info("Notes", "(Note | SkipBlock)*") Rules[:_RawNoteBlock] = rule_info("RawNoteBlock", "@StartList:a (!@BlankLine 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[:_Table] = rule_info("Table", "&{ github? } TableRow:header TableLine:line TableRow+:body { table = RDoc::Markup::Table.new(header, line, body) }") - Rules[:_TableRow] = rule_info("TableRow", "< TableItem+:row > \"|\" @Newline { row }") - Rules[:_TableItem] = rule_info("TableItem", "\"|\" < (!\"|\" !@Newline .)+ > { text.strip }") - Rules[:_TableLine] = rule_info("TableLine", "TableColumn+:line \"|\" @Newline { line }") - Rules[:_TableColumn] = rule_info("TableColumn", "\"|\" < (\"-\"+ \":\"? | \":\" \"-\"*) > { text.start_with?(\":\") ? :left : text.end_with?(\":\") ? :right : nil }") Rules[:_DefinitionList] = rule_info("DefinitionList", "&{ definition_lists? } DefinitionListItem+:list { RDoc::Markup::List.new :NOTE, *list.flatten }") Rules[:_DefinitionListItem] = rule_info("DefinitionListItem", "DefinitionListLabel+:label DefinitionListDefinition+:defns { list_items = [] list_items << RDoc::Markup::ListItem.new(label, defns.shift) list_items.concat defns.map { |defn| RDoc::Markup::ListItem.new nil, defn } unless list_items.empty? list_items }") Rules[:_DefinitionListLabel] = rule_info("DefinitionListLabel", "StrChunk:label @Sp @Newline { label }") |