rdoc 6.17.0 → 8.1.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 (169) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +193 -0
  3. data/LEGAL.rdoc +6 -0
  4. data/LICENSE.rdoc +4 -0
  5. data/README.md +132 -8
  6. data/RI.md +75 -75
  7. data/doc/markup_reference/markdown.md +659 -0
  8. data/doc/markup_reference/rdoc.rdoc +1169 -0
  9. data/exe/rdoc +2 -2
  10. data/lib/rdoc/code_object/alias.rb +70 -74
  11. data/lib/rdoc/code_object/any_method.rb +308 -293
  12. data/lib/rdoc/code_object/attr.rb +150 -142
  13. data/lib/rdoc/code_object/class_module.rb +802 -715
  14. data/lib/rdoc/code_object/constant.rb +181 -144
  15. data/lib/rdoc/code_object/context/section.rb +140 -130
  16. data/lib/rdoc/code_object/context.rb +925 -941
  17. data/lib/rdoc/code_object/extend.rb +7 -5
  18. data/lib/rdoc/code_object/include.rb +7 -5
  19. data/lib/rdoc/code_object/method_attr.rb +328 -315
  20. data/lib/rdoc/code_object/mixin.rb +97 -92
  21. data/lib/rdoc/code_object/normal_class.rb +77 -78
  22. data/lib/rdoc/code_object/normal_module.rb +61 -59
  23. data/lib/rdoc/code_object/require.rb +23 -39
  24. data/lib/rdoc/code_object/single_class.rb +21 -19
  25. data/lib/rdoc/code_object/top_level.rb +215 -202
  26. data/lib/rdoc/code_object.rb +305 -305
  27. data/lib/rdoc/comment.rb +274 -337
  28. data/lib/rdoc/cross_reference.rb +195 -206
  29. data/lib/rdoc/encoding.rb +105 -103
  30. data/lib/rdoc/erb_partial.rb +13 -11
  31. data/lib/rdoc/erbio.rb +29 -27
  32. data/lib/rdoc/generator/aliki.rb +196 -30
  33. data/lib/rdoc/generator/darkfish.rb +647 -629
  34. data/lib/rdoc/generator/json_index.rb +233 -229
  35. data/lib/rdoc/generator/markup.rb +165 -122
  36. data/lib/rdoc/generator/pot/message_extractor.rb +57 -51
  37. data/lib/rdoc/generator/pot/po.rb +52 -51
  38. data/lib/rdoc/generator/pot/po_entry.rb +138 -132
  39. data/lib/rdoc/generator/pot.rb +85 -81
  40. data/lib/rdoc/generator/ri.rb +23 -19
  41. data/lib/rdoc/generator/template/aliki/DESIGN.md +538 -0
  42. data/lib/rdoc/generator/template/aliki/_aside_toc.rhtml +1 -1
  43. data/lib/rdoc/generator/template/aliki/_footer.rhtml +2 -2
  44. data/lib/rdoc/generator/template/aliki/_head.rhtml +15 -10
  45. data/lib/rdoc/generator/template/aliki/_header.rhtml +29 -44
  46. data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +8 -6
  47. data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +8 -6
  48. data/lib/rdoc/generator/template/aliki/_sidebar_installed.rhtml +1 -1
  49. data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +3 -3
  50. data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +3 -3
  51. data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +1 -1
  52. data/lib/rdoc/generator/template/aliki/_sidebar_toggle.rhtml +1 -1
  53. data/lib/rdoc/generator/template/aliki/class.rhtml +71 -61
  54. data/lib/rdoc/generator/template/aliki/css/rdoc.css +796 -323
  55. data/lib/rdoc/generator/template/aliki/index.rhtml +1 -1
  56. data/lib/rdoc/generator/template/aliki/js/aliki.js +119 -113
  57. data/lib/rdoc/generator/template/aliki/js/bash_highlighter.js +167 -0
  58. data/lib/rdoc/generator/template/aliki/js/c_highlighter.js +1 -1
  59. data/lib/rdoc/generator/template/aliki/js/{search.js → search_controller.js} +16 -7
  60. data/lib/rdoc/generator/template/aliki/js/search_navigation.js +105 -0
  61. data/lib/rdoc/generator/template/aliki/js/search_ranker.js +239 -0
  62. data/lib/rdoc/generator/template/aliki/page.rhtml +1 -1
  63. data/lib/rdoc/generator/template/aliki/servlet_not_found.rhtml +1 -1
  64. data/lib/rdoc/generator/template/aliki/servlet_root.rhtml +2 -2
  65. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +1 -1
  66. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +8 -6
  67. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +8 -6
  68. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +1 -1
  69. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +2 -2
  70. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +1 -1
  71. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +5 -5
  72. data/lib/rdoc/generator/template/darkfish/class.rhtml +29 -32
  73. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +19 -1
  74. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +3 -3
  75. data/lib/rdoc/generator.rb +48 -46
  76. data/lib/rdoc/i18n/locale.rb +99 -95
  77. data/lib/rdoc/i18n/text.rb +109 -105
  78. data/lib/rdoc/i18n.rb +7 -5
  79. data/lib/rdoc/markdown/byte_runtime.rb +80 -0
  80. data/lib/rdoc/markdown.kpeg +52 -33
  81. data/lib/rdoc/markdown.rb +365 -177
  82. data/lib/rdoc/markup/blank_line.rb +25 -23
  83. data/lib/rdoc/markup/block_quote.rb +12 -8
  84. data/lib/rdoc/markup/document.rb +127 -123
  85. data/lib/rdoc/markup/element.rb +21 -0
  86. data/lib/rdoc/markup/formatter.rb +220 -203
  87. data/lib/rdoc/markup/hard_break.rb +30 -27
  88. data/lib/rdoc/markup/heading.rb +163 -77
  89. data/lib/rdoc/markup/include.rb +33 -29
  90. data/lib/rdoc/markup/indented_paragraph.rb +37 -33
  91. data/lib/rdoc/markup/inline_parser.rb +316 -0
  92. data/lib/rdoc/markup/list.rb +80 -88
  93. data/lib/rdoc/markup/list_item.rb +73 -85
  94. data/lib/rdoc/markup/paragraph.rb +23 -19
  95. data/lib/rdoc/markup/parser.rb +501 -497
  96. data/lib/rdoc/markup/pre_process.rb +284 -305
  97. data/lib/rdoc/markup/raw.rb +52 -55
  98. data/lib/rdoc/markup/rule.rb +16 -12
  99. data/lib/rdoc/markup/table.rb +48 -40
  100. data/lib/rdoc/markup/to_ansi.rb +143 -92
  101. data/lib/rdoc/markup/to_bs.rb +86 -102
  102. data/lib/rdoc/markup/to_html.rb +608 -506
  103. data/lib/rdoc/markup/to_html_crossref.rb +219 -210
  104. data/lib/rdoc/markup/to_html_snippet.rb +210 -205
  105. data/lib/rdoc/markup/to_joined_paragraph.rb +40 -41
  106. data/lib/rdoc/markup/to_label.rb +64 -51
  107. data/lib/rdoc/markup/to_markdown.rb +212 -184
  108. data/lib/rdoc/markup/to_rdoc.rb +341 -277
  109. data/lib/rdoc/markup/to_table_of_contents.rb +66 -62
  110. data/lib/rdoc/markup/to_test.rb +62 -50
  111. data/lib/rdoc/markup/to_tt_only.rb +83 -92
  112. data/lib/rdoc/markup/verbatim.rb +62 -58
  113. data/lib/rdoc/markup.rb +196 -215
  114. data/lib/rdoc/options.rb +1063 -1076
  115. data/lib/rdoc/parser/c.rb +1039 -1036
  116. data/lib/rdoc/parser/changelog.rb +320 -287
  117. data/lib/rdoc/parser/markdown.rb +17 -13
  118. data/lib/rdoc/parser/rbs.rb +279 -0
  119. data/lib/rdoc/parser/rd.rb +17 -13
  120. data/lib/rdoc/parser/ruby.rb +1231 -2222
  121. data/lib/rdoc/parser/ruby_colorizer.rb +303 -0
  122. data/lib/rdoc/parser/simple.rb +31 -27
  123. data/lib/rdoc/parser/text.rb +12 -8
  124. data/lib/rdoc/parser.rb +230 -221
  125. data/lib/rdoc/rbs_helper.rb +186 -0
  126. data/lib/rdoc/rd/inline.rb +57 -53
  127. data/lib/rdoc/rd.rb +90 -88
  128. data/lib/rdoc/rdoc.rb +547 -366
  129. data/lib/rdoc/ri/driver.rb +1141 -1130
  130. data/lib/rdoc/ri/formatter.rb +7 -3
  131. data/lib/rdoc/ri/paths.rb +140 -136
  132. data/lib/rdoc/ri/servlet.rb +456 -0
  133. data/lib/rdoc/ri/store.rb +4 -2
  134. data/lib/rdoc/ri/task.rb +55 -51
  135. data/lib/rdoc/ri.rb +14 -11
  136. data/lib/rdoc/rubygems_hook.rb +194 -192
  137. data/lib/rdoc/server.rb +462 -0
  138. data/lib/rdoc/stats/normal.rb +46 -42
  139. data/lib/rdoc/stats/quiet.rb +39 -35
  140. data/lib/rdoc/stats/verbose.rb +35 -31
  141. data/lib/rdoc/stats.rb +363 -338
  142. data/lib/rdoc/store.rb +919 -725
  143. data/lib/rdoc/task.rb +260 -255
  144. data/lib/rdoc/text.rb +164 -240
  145. data/lib/rdoc/token_stream.rb +88 -106
  146. data/lib/rdoc/tom_doc.rb +203 -201
  147. data/lib/rdoc/version.rb +1 -1
  148. data/lib/rdoc.rb +35 -7
  149. data/lib/rubygems_plugin.rb +2 -11
  150. data/rdoc-logo.svg +43 -0
  151. data/rdoc.gemspec +9 -7
  152. metadata +46 -32
  153. data/CONTRIBUTING.rdoc +0 -219
  154. data/ExampleMarkdown.md +0 -39
  155. data/ExampleRDoc.rdoc +0 -210
  156. data/lib/rdoc/code_object/anon_class.rb +0 -10
  157. data/lib/rdoc/code_object/ghost_method.rb +0 -6
  158. data/lib/rdoc/code_object/meta_method.rb +0 -6
  159. data/lib/rdoc/markdown/literals.kpeg +0 -21
  160. data/lib/rdoc/markdown/literals.rb +0 -454
  161. data/lib/rdoc/markup/attr_changer.rb +0 -22
  162. data/lib/rdoc/markup/attr_span.rb +0 -35
  163. data/lib/rdoc/markup/attribute_manager.rb +0 -405
  164. data/lib/rdoc/markup/attributes.rb +0 -70
  165. data/lib/rdoc/markup/regexp_handling.rb +0 -40
  166. data/lib/rdoc/parser/prism_ruby.rb +0 -1100
  167. data/lib/rdoc/parser/ripper_state_lex.rb +0 -302
  168. data/lib/rdoc/parser/ruby_tools.rb +0 -163
  169. data/lib/rdoc/servlet.rb +0 -452
@@ -2,74 +2,87 @@
2
2
  require 'cgi/escape'
3
3
  require 'cgi/util' unless defined?(CGI::EscapeExt)
4
4
 
5
- ##
6
- # Creates HTML-safe labels suitable for use in id attributes. Tidylinks are
7
- # converted to their link part and cross-reference links have the suppression
8
- # marks removed (\\SomeClass is converted to SomeClass).
5
+ module RDoc
6
+ class Markup
7
+ ##
8
+ # Creates HTML-safe labels suitable for use in id attributes. Tidylinks are
9
+ # converted to their link part and cross-reference links have the suppression
10
+ # marks removed (\\SomeClass is converted to SomeClass).
9
11
 
10
- class RDoc::Markup::ToLabel < RDoc::Markup::Formatter
12
+ class ToLabel < Markup::Formatter
11
13
 
12
- attr_reader :res # :nodoc:
14
+ attr_reader :res # :nodoc:
13
15
 
14
- ##
15
- # Creates a new formatter that will output HTML-safe labels
16
+ ##
17
+ # Creates a new formatter that will output HTML-safe labels
16
18
 
17
- def initialize(markup = nil)
18
- super nil, markup
19
+ def initialize
20
+ super
19
21
 
20
- @markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
21
- @markup.add_regexp_handling(/(((\{.*?\})|\b\S+?)\[\S+?\])/, :TIDYLINK)
22
+ @markup.add_regexp_handling CrossReference::CROSSREF_REGEXP, :CROSSREF
22
23
 
23
- add_tag :BOLD, '', ''
24
- add_tag :TT, '', ''
25
- add_tag :EM, '', ''
24
+ @res = []
25
+ end
26
26
 
27
- @res = []
28
- end
27
+ def handle_PLAIN_TEXT(text)
28
+ @res << text
29
+ end
29
30
 
30
- ##
31
- # Converts +text+ to an HTML-safe label
31
+ def handle_REGEXP_HANDLING_TEXT(text)
32
+ @res << text
33
+ end
32
34
 
33
- def convert(text)
34
- label = convert_flow @am.flow text
35
+ def handle_TT(text)
36
+ @res << text
37
+ end
35
38
 
36
- CGI.escape(label).gsub('%', '-').sub(/^-/, '')
37
- end
39
+ def extract_plaintext(text)
40
+ @res = []
41
+ handle_inline(text)
42
+ @res.join
43
+ end
38
44
 
39
- ##
40
- # Converts the CROSSREF +target+ to plain text, removing the suppression
41
- # marker, if any
45
+ ##
46
+ # Converts +text+ to an HTML-safe label using GitHub-style anchor formatting.
42
47
 
43
- def handle_regexp_CROSSREF(target)
44
- text = target.text
48
+ def convert(text)
49
+ label = extract_plaintext(text)
45
50
 
46
- text.sub(/^\\/, '')
47
- end
51
+ Text.to_anchor(label)
52
+ end
48
53
 
49
- ##
50
- # Converts the TIDYLINK +target+ to just the text part
54
+ ##
55
+ # Converts +text+ to an HTML-safe label using legacy RDoc formatting.
56
+ # Used for generating backward-compatible anchor aliases.
51
57
 
52
- def handle_regexp_TIDYLINK(target)
53
- text = target.text
58
+ def convert_legacy(text)
59
+ label = extract_plaintext(text)
54
60
 
55
- return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
61
+ CGI.escape(label).gsub('%', '-').sub(/^-/, '')
62
+ end
56
63
 
57
- $1
58
- end
64
+ ##
65
+ # Converts the CROSSREF +target+ to plain text, removing the suppression
66
+ # marker, if any
67
+
68
+ def handle_regexp_CROSSREF(text)
69
+ text.sub(/^\\/, '')
70
+ end
59
71
 
60
- alias accept_blank_line ignore
61
- alias accept_block_quote ignore
62
- alias accept_heading ignore
63
- alias accept_list_end ignore
64
- alias accept_list_item_end ignore
65
- alias accept_list_item_start ignore
66
- alias accept_list_start ignore
67
- alias accept_paragraph ignore
68
- alias accept_raw ignore
69
- alias accept_rule ignore
70
- alias accept_verbatim ignore
71
- alias end_accepting ignore
72
- alias handle_regexp_HARD_BREAK ignore
73
- alias start_accepting ignore
72
+ alias accept_blank_line ignore
73
+ alias accept_block_quote ignore
74
+ alias accept_heading ignore
75
+ alias accept_list_end ignore
76
+ alias accept_list_item_end ignore
77
+ alias accept_list_item_start ignore
78
+ alias accept_list_start ignore
79
+ alias accept_paragraph ignore
80
+ alias accept_raw ignore
81
+ alias accept_rule ignore
82
+ alias accept_verbatim ignore
83
+ alias end_accepting ignore
84
+ alias start_accepting ignore
74
85
 
86
+ end
87
+ end
75
88
  end
@@ -1,191 +1,219 @@
1
1
  # frozen_string_literal: true
2
2
  # :markup: markdown
3
3
 
4
- ##
5
- # Outputs parsed markup as Markdown
4
+ module RDoc
5
+ class Markup
6
+ ##
7
+ # Outputs parsed markup as Markdown
8
+
9
+ class ToMarkdown < Markup::ToRdoc
10
+
11
+ ##
12
+ # Creates a new formatter that will output Markdown format text
13
+
14
+ def initialize
15
+ super
16
+
17
+ @headings[1] = ['# ', '']
18
+ @headings[2] = ['## ', '']
19
+ @headings[3] = ['### ', '']
20
+ @headings[4] = ['#### ', '']
21
+ @headings[5] = ['##### ', '']
22
+ @headings[6] = ['###### ', '']
23
+
24
+ add_regexp_handling_RDOCLINK
25
+
26
+ @hard_break = " \n"
27
+ end
28
+
29
+ ##
30
+ # Finishes consumption of `list`
31
+
32
+ def accept_list_end(list)
33
+ super
34
+ end
35
+
36
+ ##
37
+ # Finishes consumption of `list_item`
38
+
39
+ def accept_list_item_end(list_item)
40
+ width = case @list_type.last
41
+ when :BULLET
42
+ 4
43
+ when :NOTE, :LABEL
44
+ use_prefix
45
+
46
+ @res << "\n"
47
+
48
+ 4
49
+ else
50
+ @list_index[-1] = @list_index.last.succ
51
+ 4
52
+ end
53
+
54
+ @indent -= width
55
+ end
56
+
57
+ ##
58
+ # Prepares the visitor for consuming `list_item`
59
+
60
+ def accept_list_item_start(list_item)
61
+ type = @list_type.last
62
+
63
+ case type
64
+ when :NOTE, :LABEL
65
+ bullets = Array(list_item.label).map do |label|
66
+ attributes(label).strip
67
+ end.join "\n"
68
+
69
+ bullets << "\n" unless bullets.empty?
70
+
71
+ @prefix = ' ' * @indent
72
+ @indent += 4
73
+ @prefix << bullets << ":" << (' ' * (@indent - 1))
74
+ else
75
+ bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
76
+ @prefix = (' ' * @indent) + bullet.ljust(4)
77
+
78
+ @indent += 4
79
+ end
80
+ end
81
+
82
+ def add_tag(tag, simple_tag, content)
83
+ if content.match?(/\A[\w\s]+\z/)
84
+ emit_inline("#{simple_tag}#{content}#{simple_tag}")
85
+ else
86
+ emit_inline("<#{tag}>#{content}</#{tag}>")
87
+ end
88
+ end
89
+
90
+ def handle_tag(nodes, simple_tag, tag)
91
+ if nodes.size == 1 && String === nodes[0]
92
+ content = apply_regexp_handling(nodes[0]).map do |text, converted|
93
+ converted ? text : convert_string(text)
94
+ end.join
95
+ add_tag(tag, simple_tag, content)
96
+ else
97
+ emit_inline("<#{tag}>")
98
+ traverse_inline_nodes(nodes)
99
+ emit_inline("</#{tag}>")
100
+ end
101
+ end
102
+
103
+ def handle_TIDYLINK(label_part, url)
104
+ if url =~ /^rdoc-label:foot/
105
+ emit_inline(handle_rdoc_link(url))
106
+ else
107
+ emit_inline('[')
108
+ traverse_inline_nodes(label_part)
109
+ emit_inline("](#{url})")
110
+ end
111
+ end
112
+
113
+ def handle_BOLD(nodes)
114
+ handle_tag(nodes, '**', 'strong')
115
+ end
116
+
117
+ def handle_EM(nodes)
118
+ handle_tag(nodes, '*', 'em')
119
+ end
120
+
121
+ def handle_BOLD_WORD(word)
122
+ add_tag('strong', '**', convert_string(word))
123
+ end
124
+
125
+ def handle_EM_WORD(word)
126
+ add_tag('em', '*', convert_string(word))
127
+ end
128
+
129
+ def handle_TT(text)
130
+ add_tag('code', '`', convert_string(text))
131
+ end
132
+
133
+ def handle_STRIKE(nodes)
134
+ handle_tag(nodes, '~~', 's')
135
+ end
136
+
137
+ def handle_HARD_BREAK
138
+ emit_inline(" \n")
139
+ end
140
+
141
+ ##
142
+ # Prepares the visitor for consuming `list`
143
+
144
+ def accept_list_start(list)
145
+ case list.type
146
+ when :BULLET, :LABEL, :NOTE
147
+ @list_index << nil
148
+ when :LALPHA, :NUMBER, :UALPHA
149
+ @list_index << 1
150
+ else
151
+ raise Error, "invalid list type #{list.type}"
152
+ end
153
+
154
+ @list_width << 4
155
+ @list_type << list.type
156
+ end
157
+
158
+ ##
159
+ # Adds `rule` to the output
160
+
161
+ def accept_rule(rule)
162
+ use_prefix or @res << ' ' * @indent
163
+ @res << '-' * 3
164
+ @res << "\n"
165
+ end
166
+
167
+ ##
168
+ # Outputs `verbatim` indented 4 columns
169
+
170
+ def accept_verbatim(verbatim)
171
+ indent = ' ' * (@indent + 4)
172
+
173
+ verbatim.parts.each do |part|
174
+ @res << indent unless part == "\n"
175
+ @res << part
176
+ end
177
+
178
+ @res << "\n"
179
+ end
180
+
181
+ ##
182
+ # Creates a Markdown-style URL from +url+ with +text+.
183
+
184
+ def gen_url(url, text)
185
+ scheme, url, = parse_url url
186
+
187
+ "[#{text.sub(%r{^#{scheme}:/*}i, '')}](#{url})"
188
+ end
189
+
190
+ ##
191
+ # Handles <tt>rdoc-</tt> type links for footnotes.
192
+
193
+ def handle_rdoc_link(url)
194
+ case url
195
+ when /^rdoc-ref:/
196
+ $'
197
+ when /^rdoc-label:footmark-(\d+)/
198
+ "[^#{$1}]:"
199
+ when /^rdoc-label:foottext-(\d+)/
200
+ "[^#{$1}]"
201
+ when /^rdoc-label:label-/
202
+ gen_url url, $'
203
+ when /^rdoc-image:/
204
+ "![](#{$'})"
205
+ when /^rdoc-[a-z]+:/
206
+ $'
207
+ end
208
+ end
209
+
210
+ ##
211
+ # Converts the rdoc-...: links into a Markdown.style links.
212
+
213
+ def handle_regexp_RDOCLINK(text)
214
+ handle_rdoc_link text
215
+ end
6
216
 
7
- class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
8
-
9
- ##
10
- # Creates a new formatter that will output Markdown format text
11
-
12
- def initialize(markup = nil)
13
- super
14
-
15
- @headings[1] = ['# ', '']
16
- @headings[2] = ['## ', '']
17
- @headings[3] = ['### ', '']
18
- @headings[4] = ['#### ', '']
19
- @headings[5] = ['##### ', '']
20
- @headings[6] = ['###### ', '']
21
-
22
- add_regexp_handling_RDOCLINK
23
- add_regexp_handling_TIDYLINK
24
-
25
- @hard_break = " \n"
26
- end
27
-
28
- ##
29
- # Maps attributes to HTML sequences
30
-
31
- def init_tags
32
- add_tag :BOLD, '**', '**'
33
- add_tag :EM, '*', '*'
34
- add_tag :TT, '`', '`'
35
- end
36
-
37
- ##
38
- # Adds a newline to the output
39
-
40
- def handle_regexp_HARD_BREAK(target)
41
- " \n"
42
- end
43
-
44
- ##
45
- # Finishes consumption of `list`
46
-
47
- def accept_list_end(list)
48
- super
49
- end
50
-
51
- ##
52
- # Finishes consumption of `list_item`
53
-
54
- def accept_list_item_end(list_item)
55
- width = case @list_type.last
56
- when :BULLET then
57
- 4
58
- when :NOTE, :LABEL then
59
- use_prefix
60
-
61
- @res << "\n"
62
-
63
- 4
64
- else
65
- @list_index[-1] = @list_index.last.succ
66
- 4
67
- end
68
-
69
- @indent -= width
70
- end
71
-
72
- ##
73
- # Prepares the visitor for consuming `list_item`
74
-
75
- def accept_list_item_start(list_item)
76
- type = @list_type.last
77
-
78
- case type
79
- when :NOTE, :LABEL then
80
- bullets = Array(list_item.label).map do |label|
81
- attributes(label).strip
82
- end.join "\n"
83
-
84
- bullets << "\n" unless bullets.empty?
85
-
86
- @prefix = ' ' * @indent
87
- @indent += 4
88
- @prefix << bullets << ":" << (' ' * (@indent - 1))
89
- else
90
- bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
91
- @prefix = (' ' * @indent) + bullet.ljust(4)
92
-
93
- @indent += 4
94
- end
95
- end
96
-
97
- ##
98
- # Prepares the visitor for consuming `list`
99
-
100
- def accept_list_start(list)
101
- case list.type
102
- when :BULLET, :LABEL, :NOTE then
103
- @list_index << nil
104
- when :LALPHA, :NUMBER, :UALPHA then
105
- @list_index << 1
106
- else
107
- raise RDoc::Error, "invalid list type #{list.type}"
108
217
  end
109
-
110
- @list_width << 4
111
- @list_type << list.type
112
- end
113
-
114
- ##
115
- # Adds `rule` to the output
116
-
117
- def accept_rule(rule)
118
- use_prefix or @res << ' ' * @indent
119
- @res << '-' * 3
120
- @res << "\n"
121
- end
122
-
123
- ##
124
- # Outputs `verbatim` indented 4 columns
125
-
126
- def accept_verbatim(verbatim)
127
- indent = ' ' * (@indent + 4)
128
-
129
- verbatim.parts.each do |part|
130
- @res << indent unless part == "\n"
131
- @res << part
132
- end
133
-
134
- @res << "\n"
135
- end
136
-
137
- ##
138
- # Creates a Markdown-style URL from +url+ with +text+.
139
-
140
- def gen_url(url, text)
141
- scheme, url, = parse_url url
142
-
143
- "[#{text.sub(%r{^#{scheme}:/*}i, '')}](#{url})"
144
218
  end
145
-
146
- ##
147
- # Handles <tt>rdoc-</tt> type links for footnotes.
148
-
149
- def handle_rdoc_link(url)
150
- case url
151
- when /^rdoc-ref:/ then
152
- $'
153
- when /^rdoc-label:footmark-(\d+)/ then
154
- "[^#{$1}]:"
155
- when /^rdoc-label:foottext-(\d+)/ then
156
- "[^#{$1}]"
157
- when /^rdoc-label:label-/ then
158
- gen_url url, $'
159
- when /^rdoc-image:/ then
160
- "![](#{$'})"
161
- when /^rdoc-[a-z]+:/ then
162
- $'
163
- end
164
- end
165
-
166
- ##
167
- # Converts the RDoc markup tidylink into a Markdown.style link.
168
-
169
- def handle_regexp_TIDYLINK(target)
170
- text = target.text
171
-
172
- return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
173
-
174
- label = $1
175
- url = $2
176
-
177
- if url =~ /^rdoc-label:foot/ then
178
- handle_rdoc_link url
179
- else
180
- gen_url url, label
181
- end
182
- end
183
-
184
- ##
185
- # Converts the rdoc-...: links into a Markdown.style links.
186
-
187
- def handle_regexp_RDOCLINK(target)
188
- handle_rdoc_link target.text
189
- end
190
-
191
219
  end