rdoc 6.3.4.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +195 -0
  3. data/History.rdoc +65 -63
  4. data/LEGAL.rdoc +7 -1
  5. data/LICENSE.rdoc +6 -0
  6. data/README.md +236 -0
  7. data/RI.md +842 -0
  8. data/TODO.rdoc +8 -7
  9. data/doc/markup_reference/markdown.md +659 -0
  10. data/doc/markup_reference/rdoc.rdoc +1169 -0
  11. data/exe/rdoc +0 -1
  12. data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -18
  13. data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +50 -24
  14. data/lib/rdoc/{attr.rb → code_object/attr.rb} +16 -14
  15. data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +225 -58
  16. data/lib/rdoc/{constant.rb → code_object/constant.rb} +44 -10
  17. data/lib/rdoc/code_object/context/section.rb +182 -0
  18. data/lib/rdoc/{context.rb → code_object/context.rb} +78 -106
  19. data/lib/rdoc/{extend.rb → code_object/extend.rb} +0 -1
  20. data/lib/rdoc/{include.rb → code_object/include.rb} +0 -1
  21. data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +46 -48
  22. data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +6 -4
  23. data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +2 -3
  24. data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
  25. data/lib/rdoc/{require.rb → code_object/require.rb} +1 -2
  26. data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +5 -1
  27. data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +60 -63
  28. data/lib/rdoc/code_object.rb +11 -39
  29. data/lib/rdoc/code_objects.rb +1 -2
  30. data/lib/rdoc/comment.rb +202 -99
  31. data/lib/rdoc/cross_reference.rb +75 -62
  32. data/lib/rdoc/encoding.rb +8 -24
  33. data/lib/rdoc/erb_partial.rb +1 -2
  34. data/lib/rdoc/erbio.rb +3 -8
  35. data/lib/rdoc/generator/aliki.rb +200 -0
  36. data/lib/rdoc/generator/darkfish.rb +156 -122
  37. data/lib/rdoc/generator/json_index.rb +8 -24
  38. data/lib/rdoc/generator/markup.rb +70 -34
  39. data/lib/rdoc/generator/pot/message_extractor.rb +7 -7
  40. data/lib/rdoc/generator/pot/po.rb +1 -1
  41. data/lib/rdoc/generator/pot/po_entry.rb +8 -8
  42. data/lib/rdoc/generator/pot.rb +1 -5
  43. data/lib/rdoc/generator/ri.rb +1 -2
  44. data/lib/rdoc/generator/template/aliki/DESIGN.md +536 -0
  45. data/lib/rdoc/generator/template/aliki/_aside_toc.rhtml +8 -0
  46. data/lib/rdoc/generator/template/aliki/_footer.rhtml +23 -0
  47. data/lib/rdoc/generator/template/aliki/_head.rhtml +163 -0
  48. data/lib/rdoc/generator/template/aliki/_header.rhtml +56 -0
  49. data/lib/rdoc/generator/template/aliki/_icons.rhtml +208 -0
  50. data/lib/rdoc/generator/template/aliki/_sidebar_ancestors.rhtml +16 -0
  51. data/lib/rdoc/generator/template/aliki/_sidebar_classes.rhtml +15 -0
  52. data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +27 -0
  53. data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +27 -0
  54. data/lib/rdoc/generator/template/aliki/_sidebar_installed.rhtml +16 -0
  55. data/lib/rdoc/generator/template/aliki/_sidebar_methods.rhtml +41 -0
  56. data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +67 -0
  57. data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +15 -0
  58. data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +21 -0
  59. data/lib/rdoc/generator/template/aliki/_sidebar_toggle.rhtml +3 -0
  60. data/lib/rdoc/generator/template/aliki/class.rhtml +230 -0
  61. data/lib/rdoc/generator/template/aliki/css/rdoc.css +2181 -0
  62. data/lib/rdoc/generator/template/aliki/index.rhtml +22 -0
  63. data/lib/rdoc/generator/template/aliki/js/aliki.js +513 -0
  64. data/lib/rdoc/generator/template/aliki/js/bash_highlighter.js +167 -0
  65. data/lib/rdoc/generator/template/aliki/js/c_highlighter.js +299 -0
  66. data/lib/rdoc/generator/template/aliki/js/search_controller.js +129 -0
  67. data/lib/rdoc/generator/template/aliki/js/search_navigation.js +105 -0
  68. data/lib/rdoc/generator/template/aliki/js/search_ranker.js +239 -0
  69. data/lib/rdoc/generator/template/aliki/js/theme-toggle.js +112 -0
  70. data/lib/rdoc/generator/template/aliki/page.rhtml +18 -0
  71. data/lib/rdoc/generator/template/aliki/servlet_not_found.rhtml +14 -0
  72. data/lib/rdoc/generator/template/aliki/servlet_root.rhtml +65 -0
  73. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +3 -3
  74. data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -14
  75. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
  76. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +11 -9
  77. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +11 -9
  78. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +7 -6
  79. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +20 -11
  80. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +25 -5
  81. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
  82. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +2 -1
  83. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  84. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +28 -7
  85. data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
  86. data/lib/rdoc/generator/template/darkfish/class.rhtml +138 -90
  87. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +420 -358
  88. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  89. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  90. data/lib/rdoc/generator/template/darkfish/index.rhtml +14 -12
  91. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +59 -3
  92. data/lib/rdoc/generator/template/darkfish/js/search.js +15 -5
  93. data/lib/rdoc/generator/template/darkfish/page.rhtml +7 -6
  94. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +12 -9
  95. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +24 -21
  96. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +35 -21
  97. data/lib/rdoc/generator/template/json_index/js/navigation.js +8 -8
  98. data/lib/rdoc/generator/template/json_index/js/searcher.js +48 -6
  99. data/lib/rdoc/generator.rb +6 -5
  100. data/lib/rdoc/i18n/text.rb +3 -3
  101. data/lib/rdoc/i18n.rb +1 -1
  102. data/lib/rdoc/known_classes.rb +5 -4
  103. data/lib/rdoc/markdown/entities.rb +0 -1
  104. data/lib/rdoc/markdown/literals.kpeg +0 -2
  105. data/lib/rdoc/markdown/literals.rb +0 -1
  106. data/lib/rdoc/markdown.kpeg +140 -62
  107. data/lib/rdoc/markdown.rb +1015 -873
  108. data/lib/rdoc/markup/blank_line.rb +25 -24
  109. data/lib/rdoc/markup/block_quote.rb +1 -2
  110. data/lib/rdoc/markup/document.rb +10 -11
  111. data/lib/rdoc/markup/element.rb +21 -0
  112. data/lib/rdoc/markup/formatter.rb +134 -115
  113. data/lib/rdoc/markup/hard_break.rb +30 -28
  114. data/lib/rdoc/markup/heading.rb +163 -72
  115. data/lib/rdoc/markup/include.rb +3 -4
  116. data/lib/rdoc/markup/indented_paragraph.rb +4 -5
  117. data/lib/rdoc/markup/inline_parser.rb +312 -0
  118. data/lib/rdoc/markup/list.rb +6 -7
  119. data/lib/rdoc/markup/list_item.rb +6 -7
  120. data/lib/rdoc/markup/paragraph.rb +2 -3
  121. data/lib/rdoc/markup/parser.rb +29 -19
  122. data/lib/rdoc/markup/pre_process.rb +39 -18
  123. data/lib/rdoc/markup/raw.rb +52 -56
  124. data/lib/rdoc/markup/rule.rb +2 -3
  125. data/lib/rdoc/markup/table.rb +49 -32
  126. data/lib/rdoc/markup/to_ansi.rb +58 -8
  127. data/lib/rdoc/markup/to_bs.rb +47 -38
  128. data/lib/rdoc/markup/to_html.rb +343 -105
  129. data/lib/rdoc/markup/to_html_crossref.rb +143 -58
  130. data/lib/rdoc/markup/to_html_snippet.rb +78 -76
  131. data/lib/rdoc/markup/to_joined_paragraph.rb +3 -9
  132. data/lib/rdoc/markup/to_label.rb +34 -25
  133. data/lib/rdoc/markup/to_markdown.rb +74 -51
  134. data/lib/rdoc/markup/to_rdoc.rb +141 -82
  135. data/lib/rdoc/markup/to_table_of_contents.rb +4 -5
  136. data/lib/rdoc/markup/to_test.rb +10 -3
  137. data/lib/rdoc/markup/to_tt_only.rb +17 -31
  138. data/lib/rdoc/markup/verbatim.rb +5 -6
  139. data/lib/rdoc/markup.rb +59 -707
  140. data/lib/rdoc/options.rb +228 -101
  141. data/lib/rdoc/parser/c.rb +186 -184
  142. data/lib/rdoc/parser/changelog.rb +57 -13
  143. data/lib/rdoc/parser/markdown.rb +0 -2
  144. data/lib/rdoc/parser/rbs.rb +275 -0
  145. data/lib/rdoc/parser/rd.rb +0 -1
  146. data/lib/rdoc/parser/ruby.rb +963 -2024
  147. data/lib/rdoc/parser/ruby_colorizer.rb +253 -0
  148. data/lib/rdoc/parser/simple.rb +6 -23
  149. data/lib/rdoc/parser/text.rb +0 -1
  150. data/lib/rdoc/parser.rb +35 -14
  151. data/lib/rdoc/rbs_helper.rb +186 -0
  152. data/lib/rdoc/rd/block_parser.rb +659 -11
  153. data/lib/rdoc/rd/block_parser.ry +13 -9
  154. data/lib/rdoc/rd/inline.rb +4 -5
  155. data/lib/rdoc/rd/inline_parser.rb +646 -2
  156. data/lib/rdoc/rd.rb +4 -5
  157. data/lib/rdoc/rdoc.rb +234 -90
  158. data/lib/rdoc/ri/driver.rb +172 -172
  159. data/lib/rdoc/ri/paths.rb +3 -3
  160. data/lib/rdoc/{servlet.rb → ri/servlet.rb} +28 -27
  161. data/lib/rdoc/ri/store.rb +0 -1
  162. data/lib/rdoc/ri/task.rb +3 -3
  163. data/lib/rdoc/ri.rb +5 -5
  164. data/lib/rdoc/rubygems_hook.rb +106 -25
  165. data/lib/rdoc/server.rb +460 -0
  166. data/lib/rdoc/stats/normal.rb +1 -1
  167. data/lib/rdoc/stats/quiet.rb +1 -2
  168. data/lib/rdoc/stats/verbose.rb +3 -5
  169. data/lib/rdoc/stats.rb +158 -136
  170. data/lib/rdoc/store.rb +267 -48
  171. data/lib/rdoc/task.rb +54 -28
  172. data/lib/rdoc/text.rb +60 -120
  173. data/lib/rdoc/token_stream.rb +30 -45
  174. data/lib/rdoc/tom_doc.rb +9 -15
  175. data/lib/rdoc/version.rb +3 -1
  176. data/lib/rdoc.rb +90 -52
  177. data/lib/rubygems_plugin.rb +14 -0
  178. data/man/ri.1 +2 -0
  179. data/rdoc-logo.svg +43 -0
  180. data/rdoc.gemspec +25 -200
  181. metadata +120 -53
  182. data/CONTRIBUTING.rdoc +0 -220
  183. data/ExampleMarkdown.md +0 -37
  184. data/ExampleRDoc.rdoc +0 -208
  185. data/Gemfile +0 -12
  186. data/README.rdoc +0 -129
  187. data/RI.rdoc +0 -57
  188. data/Rakefile +0 -101
  189. data/bin/console +0 -7
  190. data/bin/setup +0 -6
  191. data/lib/rdoc/anon_class.rb +0 -11
  192. data/lib/rdoc/context/section.rb +0 -232
  193. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  194. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
  195. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
  196. data/lib/rdoc/generator/template/json_index/.document +0 -1
  197. data/lib/rdoc/ghost_method.rb +0 -7
  198. data/lib/rdoc/markup/attr_changer.rb +0 -23
  199. data/lib/rdoc/markup/attr_span.rb +0 -36
  200. data/lib/rdoc/markup/attribute_manager.rb +0 -409
  201. data/lib/rdoc/markup/attributes.rb +0 -71
  202. data/lib/rdoc/markup/regexp_handling.rb +0 -41
  203. data/lib/rdoc/meta_method.rb +0 -7
  204. data/lib/rdoc/parser/ripper_state_lex.rb +0 -590
  205. data/lib/rdoc/parser/ruby_tools.rb +0 -167
@@ -9,7 +9,7 @@
9
9
  # RDoc::Markdown as described by the [markdown syntax][syntax].
10
10
  #
11
11
  # To choose Markdown as your only default format see
12
- # RDoc::Options@Saved+Options for instructions on setting up a `.doc_options`
12
+ # RDoc::Options@Saved+Options for instructions on setting up a `.rdoc_options`
13
13
  # file to store your project default.
14
14
  #
15
15
  # ## Usage
@@ -178,7 +178,7 @@
178
178
  # [dingus]: http://daringfireball.net/projects/markdown/dingus
179
179
  # [GFM]: https://github.github.com/gfm/
180
180
  # [pegmarkdown]: https://github.com/jgm/peg-markdown
181
- # [PHPE]: http://michelf.com/projects/php-markdown/extra/#def-list
181
+ # [PHPE]: https://michelf.ca/projects/php-markdown/extra/#def-list
182
182
  # [syntax]: http://daringfireball.net/projects/markdown/syntax
183
183
  #--
184
184
  # Last updated to jgm/peg-markdown commit 8f8fc22ef0
@@ -187,11 +187,11 @@
187
187
 
188
188
  %% {
189
189
 
190
- require 'rdoc'
191
- require 'rdoc/markup/to_joined_paragraph'
192
- require 'rdoc/markdown/entities'
190
+ require_relative '../rdoc'
191
+ require_relative 'markup/to_joined_paragraph'
192
+ require_relative 'markdown/entities'
193
193
 
194
- require 'rdoc/markdown/literals'
194
+ require_relative 'markdown/literals'
195
195
 
196
196
  ##
197
197
  # Supported extensions
@@ -303,6 +303,20 @@
303
303
  end
304
304
  end
305
305
 
306
+ # Escape character that has special meaning in RDoc format.
307
+ # To allow rdoc-styled link used in markdown format for now, bracket and brace are not escaped.
308
+
309
+ def rdoc_escape(text)
310
+ text.gsub(/[*+<\\_]/) {|s| "\\#{s}" }
311
+ end
312
+
313
+ # Escape link url that contains brackets.
314
+ # Brackets needs escape because link url will be surrounded by `[]` in RDoc format.
315
+
316
+ def rdoc_link_url_escape(text)
317
+ text.gsub(/[\[\]\\]/) {|s| "\\#{s}" }
318
+ end
319
+
306
320
  ##
307
321
  # :category: Extensions
308
322
  #
@@ -389,6 +403,8 @@
389
403
  # the note order list for proper display at the end of the document.
390
404
 
391
405
  def note_for ref
406
+ return unless @note_order
407
+
392
408
  @note_order << ref
393
409
 
394
410
  label = @note_order.length
@@ -449,7 +465,7 @@
449
465
 
450
466
  @note_order.each_with_index do |ref, index|
451
467
  label = index + 1
452
- note = @footnotes[ref]
468
+ note = @footnotes[ref] or raise ParseError, "footnote [^#{ref}] not found"
453
469
 
454
470
  link = "{^#{label}}[rdoc-label:footmark-#{label}:foottext-#{label}] "
455
471
  note.parts.unshift link
@@ -490,10 +506,57 @@
490
506
  # Wraps `text` in strike markup for rdoc inline formatting
491
507
 
492
508
  def strike text
493
- if text =~ /\A[a-z\d.\/-]+\z/i then
494
- "~#{text}~"
509
+ "<del>#{text}</del>"
510
+ end
511
+
512
+ ##
513
+ # Wraps `text` in code markup for rdoc inline formatting
514
+
515
+ def code text
516
+ # trim even spaces
517
+ text = $2 while /\A( +|\t+)(.*)\1\z/ =~ text
518
+ # escape unescaped backslash at the end
519
+ backslash_at_end = "\\" if /(?<!\\)(?:\\\\)*\\\z/.match?(text)
520
+ "<code>#{text}#{backslash_at_end}</code>"
521
+ end
522
+
523
+ ##
524
+ # Parses inline markdown in table cells
525
+
526
+ def parse_table_cells(table)
527
+ # Parse header cells
528
+ table.header = table.header.map { |cell| parse_cell_inline(cell) }
529
+
530
+ # Parse body cells
531
+ table.body = table.body.map do |row|
532
+ row.map { |cell| parse_cell_inline(cell) }
533
+ end
534
+
535
+ table
536
+ end
537
+
538
+ ##
539
+ # Parses inline markdown in a single table cell
540
+
541
+ def parse_cell_inline(text)
542
+ return text if text.nil? || text.empty?
543
+
544
+ # Create a new parser instance for the cell
545
+ cell_parser = RDoc::Markdown.new(@extensions, @debug)
546
+
547
+ # Parse the cell content
548
+ doc = cell_parser.parse(text)
549
+
550
+ # Extract the parsed content
551
+ if doc && doc.parts && !doc.parts.empty?
552
+ para = doc.parts.first
553
+ if para.is_a?(RDoc::Markup::Paragraph)
554
+ para.parts.join
555
+ else
556
+ text
557
+ end
495
558
  else
496
- "<s>#{text}</s>"
559
+ text
497
560
  end
498
561
  end
499
562
  }
@@ -530,7 +593,7 @@ AtxInline = !@Newline !(@Sp /#*/ @Sp @Newline) Inline
530
593
  AtxStart = < /\#{1,6}/ >
531
594
  { text.length }
532
595
 
533
- AtxHeading = AtxStart:s @Sp AtxInline+:a (@Sp /#*/ @Sp)? @Newline
596
+ AtxHeading = AtxStart:s @Spacechar+ AtxInline+:a (@Sp /#*/ @Sp)? @Newline
534
597
  { RDoc::Markup::Heading.new(s, a.join) }
535
598
 
536
599
  SetextHeading = SetextHeading1 | SetextHeading2
@@ -556,8 +619,8 @@ BlockQuote = BlockQuoteRaw:a
556
619
 
557
620
  BlockQuoteRaw = @StartList:a
558
621
  (( ">" " "? Line:l { a << l } )
559
- ( !">" !@BlankLine Line:c { a << c } )*
560
- ( @BlankLine:n { a << n } )*
622
+ ( !">" !@BlankLine !(AtxStart @Spacechar) !Bullet !Enumerator !( &{ github? } Ticks3 ) Line:c { a << c } )*
623
+ ( ">" @BlankLine:n { a << n } )*
561
624
  )+
562
625
  { inner_parse a.join }
563
626
 
@@ -914,6 +977,7 @@ Inline = Str
914
977
  | InlineNote
915
978
  | Code
916
979
  | RawHtml
980
+ | StrippedComment
917
981
  | Entity
918
982
  | EscapedChar
919
983
  | Symbol
@@ -922,11 +986,11 @@ Space = @Spacechar+ { " " }
922
986
 
923
987
  Str = @StartList:a
924
988
  < @NormalChar+ > { a = text }
925
- ( StrChunk:c { a << c } )* { a }
989
+ ( StrChunk:c { a << c } )* { rdoc_escape(a) }
926
990
 
927
991
  StrChunk = < (@NormalChar | /_+/ &Alphanumeric)+ > { text }
928
992
 
929
- EscapedChar = "\\" !@Newline < /[:\\`|*_{}\[\]()#+.!><-]/ > { text }
993
+ EscapedChar = "\\" !@Newline < /[:\\`|*_{}\[\]()#+.!><-]/ > { rdoc_escape(text) }
930
994
 
931
995
  Entity = ( HexEntity | DecEntity | CharEntity ):a { a }
932
996
 
@@ -941,7 +1005,7 @@ TerminalEndline = @Sp @Newline @Eof
941
1005
  LineBreak = " " @NormalEndline { RDoc::Markup::HardBreak.new }
942
1006
 
943
1007
  Symbol = < @SpecialChar >
944
- { text }
1008
+ { rdoc_escape(text) }
945
1009
 
946
1010
  # This keeps the parser from getting bogged down on long strings of '*' or '_',
947
1011
  # or strings of '*' or '_' with space on each side:
@@ -992,9 +1056,8 @@ Strike = &{ strike? }
992
1056
  "~~"
993
1057
  { strike a.join }
994
1058
 
995
- # TODO alt text support
996
- Image = "!" ( ExplicitLink | ReferenceLink ):a
997
- { "rdoc-image:#{a[/\[(.*)\]/, 1]}" }
1059
+ Image = "!" ExplicitLinkWithLabel:a
1060
+ { "rdoc-image:#{a[:link]}:#{a[:label]}" }
998
1061
 
999
1062
  Link = ExplicitLink | ReferenceLink | AutoLink
1000
1063
 
@@ -1006,8 +1069,11 @@ ReferenceLinkDouble = Label:content < Spnl > !"[]" Label:label
1006
1069
  ReferenceLinkSingle = Label:content < (Spnl "[]")? >
1007
1070
  { link_to content, content, text }
1008
1071
 
1009
- ExplicitLink = Label:l "(" @Sp Source:s Spnl Title @Sp ")"
1010
- { "{#{l}}[#{s}]" }
1072
+ ExplicitLink = ExplicitLinkWithLabel:a
1073
+ { "{#{a[:label]}}[#{rdoc_link_url_escape(a[:link])}]" }
1074
+
1075
+ ExplicitLinkWithLabel = Label:label "(" @Sp Source:link Spnl Title @Sp ")"
1076
+ { { label: label, link: link } }
1011
1077
 
1012
1078
  Source = ( "<" < SourceContents > ">" | < SourceContents > )
1013
1079
  { text }
@@ -1062,35 +1128,35 @@ Ticks3 = "```" !"`"
1062
1128
  Ticks4 = "````" !"`"
1063
1129
  Ticks5 = "`````" !"`"
1064
1130
 
1065
- Code = ( Ticks1 @Sp < (
1131
+ Code = ( Ticks1 < (
1066
1132
  ( !"`" Nonspacechar )+ | !Ticks1 /`+/ |
1067
- !( @Sp Ticks1 ) ( @Spacechar | @Newline !@BlankLine )
1068
- )+ > @Sp Ticks1 |
1069
- Ticks2 @Sp < (
1133
+ !Ticks1 ( @Spacechar | @Newline !@BlankLine )
1134
+ )+ > Ticks1 |
1135
+ Ticks2 < (
1070
1136
  ( !"`" Nonspacechar )+ |
1071
1137
  !Ticks2 /`+/ |
1072
- !( @Sp Ticks2 ) ( @Spacechar | @Newline !@BlankLine )
1073
- )+ > @Sp Ticks2 |
1074
- Ticks3 @Sp < (
1138
+ !Ticks2 ( @Spacechar | @Newline !@BlankLine )
1139
+ )+ > Ticks2 |
1140
+ Ticks3 < (
1075
1141
  ( !"`" Nonspacechar )+ |
1076
1142
  !Ticks3 /`+/ |
1077
- !( @Sp Ticks3 ) ( @Spacechar | @Newline !@BlankLine )
1078
- )+ > @Sp Ticks3 |
1079
- Ticks4 @Sp < (
1143
+ !Ticks3 ( @Spacechar | @Newline !@BlankLine )
1144
+ )+ > Ticks3 |
1145
+ Ticks4 < (
1080
1146
  ( !"`" Nonspacechar )+ |
1081
1147
  !Ticks4 /`+/ |
1082
- !( @Sp Ticks4 ) ( @Spacechar | @Newline !@BlankLine )
1083
- )+ > @Sp Ticks4 |
1084
- Ticks5 @Sp < (
1148
+ !Ticks4 ( @Spacechar | @Newline !@BlankLine )
1149
+ )+ > Ticks4 |
1150
+ Ticks5 < (
1085
1151
  ( !"`" Nonspacechar )+ |
1086
1152
  !Ticks5 /`+/ |
1087
- !( @Sp Ticks5 ) ( @Spacechar | @Newline !@BlankLine )
1088
- )+ > @Sp Ticks5
1153
+ !Ticks5 ( @Spacechar | @Newline !@BlankLine )
1154
+ )+ > Ticks5
1089
1155
  )
1090
- { "<code>#{text}</code>" }
1156
+ { code text }
1091
1157
 
1092
- RawHtml = < (HtmlComment | HtmlBlockScript | HtmlTag) >
1093
- { if html? then text else '' end }
1158
+ RawHtml = < HtmlBlockScript | HtmlTag > { html? ? text : '' }
1159
+ StrippedComment = HtmlComment { '' }
1094
1160
 
1095
1161
  BlankLine = @Sp @Newline { "\n" }
1096
1162
 
@@ -1114,12 +1180,12 @@ Newline = %literals.Newline
1114
1180
  Spacechar = %literals.Spacechar
1115
1181
 
1116
1182
  HexEntity = /&#x/i < /[0-9a-fA-F]+/ > ";"
1117
- { [text.to_i(16)].pack 'U' }
1183
+ { rdoc_escape([text.to_i(16)].pack('U')) }
1118
1184
  DecEntity = "&#" < /[0-9]+/ > ";"
1119
- { [text.to_i].pack 'U' }
1185
+ { rdoc_escape([text.to_i].pack('U')) }
1120
1186
  CharEntity = "&" </[A-Za-z0-9]+/ > ";"
1121
1187
  { if entity = HTML_ENTITIES[text] then
1122
- entity.pack 'U*'
1188
+ rdoc_escape(entity.pack('U*'))
1123
1189
  else
1124
1190
  "&#{text};"
1125
1191
  end
@@ -1135,7 +1201,7 @@ StartList = &.
1135
1201
  { [] }
1136
1202
 
1137
1203
  Line = @RawLine:a { a }
1138
- RawLine = ( < (!"\r" !"\n" .)* @Newline >
1204
+ RawLine = ( < /[^\r\n]*/ @Newline >
1139
1205
  | < .+ > @Eof ) { text }
1140
1206
 
1141
1207
  SkipBlock = HtmlBlock
@@ -1170,23 +1236,25 @@ InlineNote = &{ notes? }
1170
1236
  @StartList:a
1171
1237
  ( !"]" Inline:l { a << l } )+
1172
1238
  "]"
1173
- { ref = [:inline, @note_order.length]
1174
- @footnotes[ref] = paragraph a
1239
+ { if @note_order
1240
+ ref = [:inline, @note_order.length]
1241
+ @footnotes[ref] = paragraph a
1175
1242
 
1176
- note_for ref
1243
+ note_for ref
1244
+ end
1177
1245
  }
1178
1246
 
1179
1247
  Notes = ( Note | SkipBlock )*
1180
1248
 
1181
1249
  RawNoteBlock = @StartList:a
1182
- ( !@BlankLine OptionallyIndentedLine:l { a << l } )+
1250
+ ( !@BlankLine !RawNoteReference OptionallyIndentedLine:l { a << l } )+
1183
1251
  ( < @BlankLine* > { a << text } )
1184
1252
  { a }
1185
1253
 
1186
1254
  # Markdown extensions added by RDoc follow
1187
1255
 
1188
1256
  CodeFence = &{ github? }
1189
- Ticks3 (@Sp StrChunk:format)? Spnl < (
1257
+ Ticks3 (@Sp StrChunk:format)? @Sp @Newline? < (
1190
1258
  ( !"`" Nonspacechar )+ |
1191
1259
  !Ticks3 /`+/ |
1192
1260
  Spacechar |
@@ -1198,19 +1266,29 @@ CodeFence = &{ github? }
1198
1266
  }
1199
1267
 
1200
1268
  Table = &{ github? }
1201
- TableRow:header TableLine:line TableRow+:body
1202
- { table = RDoc::Markup::Table.new(header, line, body) }
1203
-
1204
- TableRow = TableItem+:row "|" @Newline
1205
- { row }
1206
- TableItem = "|" < (!"|" !@Newline .)+ >
1207
- { text.strip }
1208
-
1209
- TableLine = TableColumn+:line "|" @Newline
1210
- { line }
1211
- TableColumn = "|" < ( "-"+ ":"? | ":" "-"* ) >
1212
- { text.start_with?(":") ? :left :
1213
- text.end_with?(":") ? :right : nil
1269
+ TableHead:header TableLine:line TableRow+:body
1270
+ {
1271
+ table = RDoc::Markup::Table.new(header, line, body)
1272
+ parse_table_cells(table)
1273
+ }
1274
+
1275
+ TableHead = TableItem2+:items "|"? @Newline
1276
+ { items }
1277
+
1278
+ TableRow = ( ( TableItem:item1 TableItem2+:items { [item1, *items] } ):row | TableItem2+:row ) "|"? @Newline
1279
+ { row }
1280
+ TableItem2 = "|" TableItem
1281
+ TableItem = < /(?:\\.|[^|\n])+/ >
1282
+ { text.strip.gsub(/\\([|])/, '\1') }
1283
+
1284
+ TableLine = ( ( TableAlign:align1 TableAlign2+:aligns {[align1, *aligns] } ):line | TableAlign2+:line ) "|"? @Newline
1285
+ { line }
1286
+ TableAlign2 = "|" @Sp TableAlign
1287
+ TableAlign = < /:?-+:?/ > @Sp
1288
+ {
1289
+ text.start_with?(":") ?
1290
+ (text.end_with?(":") ? :center : :left) :
1291
+ (text.end_with?(":") ? :right : nil)
1214
1292
  }
1215
1293
 
1216
1294
  DefinitionList = &{ definition_lists? }
@@ -1230,7 +1308,7 @@ DefinitionListItem = ( DefinitionListLabel+ ):label
1230
1308
  list_items
1231
1309
  }
1232
1310
 
1233
- DefinitionListLabel = StrChunk:label @Sp @Newline
1311
+ DefinitionListLabel = Inline:label @Sp @Newline
1234
1312
  { label }
1235
1313
 
1236
1314
  DefinitionListDefinition = @NonindentSpace ":" @Space Inlines:a @BlankLine+