[前][次][番号順一覧][スレッド一覧]

ruby-changes:72852

From: Nobuyoshi <ko1@a...>
Date: Mon, 8 Aug 2022 01:13:52 +0900 (JST)
Subject: [ruby-changes:72852] 5beb75ce8d (master): [ruby/rdoc] Allow multiple footnotes without in-between blank lines

https://git.ruby-lang.org/ruby.git/commit/?id=5beb75ce8d

From 5beb75ce8dac1964f88dc82f4216892bf4256aed Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Mon, 8 Aug 2022 00:32:37 +0900
Subject: [ruby/rdoc] Allow multiple footnotes without in-between blank lines

https://github.com/ruby/ruby/commit/e4e054e3ce40 used four footnotes
without blank lines.  And the ChangeLog generated from that commit
resulted in ``undefined method `parts' for nil`` error.

For now, let a footnote terminated by the next footnote mark.

Also refined the error message when undefined footnote is used.

https://github.com/ruby/rdoc/commit/a7f290130b
---
 lib/rdoc/markdown.rb            | 34 +++++++++++++++++++++++++---------
 test/rdoc/test_rdoc_markdown.rb |  1 -
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/lib/rdoc/markdown.rb b/lib/rdoc/markdown.rb
index 25a7217d3c..26b32f9b73 100644
--- a/lib/rdoc/markdown.rb
+++ b/lib/rdoc/markdown.rb
@@ -811,7 +811,7 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L811
 
       @note_order.each_with_index do |ref, index|
         label = index + 1
-        note = @footnotes[ref]
+        note = @footnotes[ref] or raise ParseError, "footnote [^#{ref}] not found"
 
         link = "{^#{label}}[rdoc-label:footmark-#{label}:foottext-#{label}] "
         note.parts.unshift link
@@ -15533,7 +15533,7 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L15533
     return _tmp
   end
 
-  # RawNoteBlock = @StartList:a (!@BlankLine OptionallyIndentedLine:l { a << l })+ < @BlankLine* > { a << text } { a }
+  # RawNoteBlock = @StartList:a (!@BlankLine !RawNoteReference OptionallyIndentedLine:l { a << l })+ < @BlankLine* > { a << text } { a }
   def _RawNoteBlock
 
     _save = self.pos
@@ -15556,6 +15556,14 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L15556
           self.pos = _save2
           break
         end
+        _save4 = self.pos
+        _tmp = apply(:_RawNoteReference)
+        _tmp = _tmp ? nil : true
+        self.pos = _save4
+        unless _tmp
+          self.pos = _save2
+          break
+        end
         _tmp = apply(:_OptionallyIndentedLine)
         l = @result
         unless _tmp
@@ -15573,26 +15581,34 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L15581
       if _tmp
         while true
 
-          _save4 = self.pos
+          _save5 = self.pos
           while true # sequence
-            _save5 = self.pos
+            _save6 = self.pos
             _tmp = _BlankLine()
             _tmp = _tmp ? nil : true
-            self.pos = _save5
+            self.pos = _save6
             unless _tmp
-              self.pos = _save4
+              self.pos = _save5
+              break
+            end
+            _save7 = self.pos
+            _tmp = apply(:_RawNoteReference)
+            _tmp = _tmp ? nil : true
+            self.pos = _save7
+            unless _tmp
+              self.pos = _save5
               break
             end
             _tmp = apply(:_OptionallyIndentedLine)
             l = @result
             unless _tmp
-              self.pos = _save4
+              self.pos = _save5
               break
             end
             @result = begin;  a << l ; end
             _tmp = true
             unless _tmp
-              self.pos = _save4
+              self.pos = _save5
             end
             break
           end # end sequence
@@ -16656,7 +16672,7 @@ class RDoc::Markdown https://github.com/ruby/ruby/blob/trunk/lib/rdoc/markdown.rb#L16672
   Rules[:_Note] = rule_info("Note", "&{ notes? } @NonindentSpace RawNoteReference:ref \":\" @Sp @StartList:a RawNoteBlock:i { a.concat i } (&Indent RawNoteBlock:i { a.concat i })* { @footnotes[ref] = paragraph a                    nil                 }")
   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 OptionallyIndentedLine:l { a << l })+ < @BlankLine* > { a << text } { a }")
+  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[:_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 }")
diff --git a/test/rdoc/test_rdoc_markdown.rb b/test/rdoc/test_rdoc_markdown.rb
index c223c44c12..ca76c34f43 100644
--- a/test/rdoc/test_rdoc_markdown.rb
+++ b/test/rdoc/test_rdoc_markdown.rb
@@ -761,7 +761,6 @@ with inline notes^[like this] https://github.com/ruby/ruby/blob/trunk/test/rdoc/test_rdoc_markdown.rb#L761
 and an extra note.[^2]
 
 [^1]: With a footnote
-
 [^2]: Which should be numbered correctly
     MD
 
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]