rdoc 8.0.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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +1 -3
  3. data/RI.md +75 -75
  4. data/exe/rdoc +2 -2
  5. data/lib/rdoc/code_object/alias.rb +71 -69
  6. data/lib/rdoc/code_object/any_method.rb +305 -303
  7. data/lib/rdoc/code_object/attr.rb +150 -148
  8. data/lib/rdoc/code_object/class_module.rb +798 -792
  9. data/lib/rdoc/code_object/constant.rb +175 -173
  10. data/lib/rdoc/code_object/context/section.rb +142 -138
  11. data/lib/rdoc/code_object/context.rb +926 -958
  12. data/lib/rdoc/code_object/extend.rb +7 -5
  13. data/lib/rdoc/code_object/include.rb +7 -5
  14. data/lib/rdoc/code_object/method_attr.rb +326 -319
  15. data/lib/rdoc/code_object/mixin.rb +97 -95
  16. data/lib/rdoc/code_object/normal_class.rb +77 -78
  17. data/lib/rdoc/code_object/normal_module.rb +61 -59
  18. data/lib/rdoc/code_object/require.rb +23 -39
  19. data/lib/rdoc/code_object/single_class.rb +21 -19
  20. data/lib/rdoc/code_object/top_level.rb +212 -219
  21. data/lib/rdoc/code_object.rb +305 -303
  22. data/lib/rdoc/comment.rb +275 -273
  23. data/lib/rdoc/cross_reference.rb +192 -190
  24. data/lib/rdoc/encoding.rb +105 -103
  25. data/lib/rdoc/erb_partial.rb +13 -11
  26. data/lib/rdoc/erbio.rb +29 -27
  27. data/lib/rdoc/generator/aliki.rb +161 -153
  28. data/lib/rdoc/generator/darkfish.rb +645 -635
  29. data/lib/rdoc/generator/json_index.rb +233 -229
  30. data/lib/rdoc/generator/markup.rb +164 -146
  31. data/lib/rdoc/generator/pot/message_extractor.rb +57 -51
  32. data/lib/rdoc/generator/pot/po.rb +52 -51
  33. data/lib/rdoc/generator/pot/po_entry.rb +138 -132
  34. data/lib/rdoc/generator/pot.rb +85 -81
  35. data/lib/rdoc/generator/ri.rb +23 -19
  36. data/lib/rdoc/generator/template/aliki/DESIGN.md +6 -4
  37. data/lib/rdoc/generator/template/aliki/_footer.rhtml +1 -1
  38. data/lib/rdoc/generator/template/aliki/_head.rhtml +10 -10
  39. data/lib/rdoc/generator/template/aliki/_header.rhtml +29 -44
  40. data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +4 -4
  41. data/lib/rdoc/generator/template/aliki/css/rdoc.css +207 -178
  42. data/lib/rdoc/generator/template/aliki/js/aliki.js +60 -84
  43. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +1 -1
  44. data/lib/rdoc/generator.rb +48 -46
  45. data/lib/rdoc/i18n/locale.rb +99 -95
  46. data/lib/rdoc/i18n/text.rb +109 -105
  47. data/lib/rdoc/i18n.rb +7 -5
  48. data/lib/rdoc/markdown/byte_runtime.rb +80 -0
  49. data/lib/rdoc/markdown.kpeg +15 -11
  50. data/lib/rdoc/markdown.rb +40 -47
  51. data/lib/rdoc/markup/block_quote.rb +12 -8
  52. data/lib/rdoc/markup/document.rb +127 -123
  53. data/lib/rdoc/markup/formatter.rb +219 -215
  54. data/lib/rdoc/markup/include.rb +33 -29
  55. data/lib/rdoc/markup/indented_paragraph.rb +37 -33
  56. data/lib/rdoc/markup/inline_parser.rb +281 -277
  57. data/lib/rdoc/markup/list.rb +80 -88
  58. data/lib/rdoc/markup/list_item.rb +73 -85
  59. data/lib/rdoc/markup/paragraph.rb +23 -19
  60. data/lib/rdoc/markup/parser.rb +501 -497
  61. data/lib/rdoc/markup/pre_process.rb +283 -279
  62. data/lib/rdoc/markup/raw.rb +2 -2
  63. data/lib/rdoc/markup/rule.rb +16 -12
  64. data/lib/rdoc/markup/to_ansi.rb +143 -139
  65. data/lib/rdoc/markup/to_bs.rb +72 -68
  66. data/lib/rdoc/markup/to_html.rb +594 -565
  67. data/lib/rdoc/markup/to_html_crossref.rb +234 -230
  68. data/lib/rdoc/markup/to_html_snippet.rb +232 -227
  69. data/lib/rdoc/markup/to_joined_paragraph.rb +36 -32
  70. data/lib/rdoc/markup/to_label.rb +63 -59
  71. data/lib/rdoc/markup/to_markdown.rb +212 -208
  72. data/lib/rdoc/markup/to_rdoc.rb +336 -332
  73. data/lib/rdoc/markup/to_table_of_contents.rb +66 -62
  74. data/lib/rdoc/markup/to_test.rb +60 -56
  75. data/lib/rdoc/markup/to_tt_only.rb +84 -80
  76. data/lib/rdoc/markup/verbatim.rb +62 -58
  77. data/lib/rdoc/markup.rb +198 -196
  78. data/lib/rdoc/options.rb +1063 -1061
  79. data/lib/rdoc/parser/c.rb +1039 -1037
  80. data/lib/rdoc/parser/changelog.rb +319 -315
  81. data/lib/rdoc/parser/markdown.rb +17 -13
  82. data/lib/rdoc/parser/rbs.rb +239 -235
  83. data/lib/rdoc/parser/rd.rb +17 -13
  84. data/lib/rdoc/parser/ruby.rb +1245 -1124
  85. data/lib/rdoc/parser/ruby_colorizer.rb +263 -213
  86. data/lib/rdoc/parser/simple.rb +31 -27
  87. data/lib/rdoc/parser/text.rb +12 -8
  88. data/lib/rdoc/parser.rb +228 -220
  89. data/lib/rdoc/rbs_helper.rb +1 -1
  90. data/lib/rdoc/rd/inline.rb +57 -53
  91. data/lib/rdoc/rd.rb +90 -88
  92. data/lib/rdoc/rdoc.rb +500 -491
  93. data/lib/rdoc/ri/driver.rb +1140 -1135
  94. data/lib/rdoc/ri/formatter.rb +7 -3
  95. data/lib/rdoc/ri/paths.rb +140 -136
  96. data/lib/rdoc/ri/servlet.rb +354 -350
  97. data/lib/rdoc/ri/store.rb +4 -2
  98. data/lib/rdoc/ri/task.rb +55 -51
  99. data/lib/rdoc/ri.rb +14 -12
  100. data/lib/rdoc/rubygems_hook.rb +183 -181
  101. data/lib/rdoc/server.rb +349 -347
  102. data/lib/rdoc/stats/normal.rb +46 -42
  103. data/lib/rdoc/stats/quiet.rb +39 -35
  104. data/lib/rdoc/stats/verbose.rb +35 -31
  105. data/lib/rdoc/stats.rb +365 -363
  106. data/lib/rdoc/store.rb +888 -902
  107. data/lib/rdoc/task.rb +260 -256
  108. data/lib/rdoc/text.rb +135 -133
  109. data/lib/rdoc/token_stream.rb +101 -93
  110. data/lib/rdoc/tom_doc.rb +203 -201
  111. data/lib/rdoc/version.rb +1 -1
  112. metadata +4 -5
  113. data/lib/rdoc/markdown/literals.kpeg +0 -21
  114. data/lib/rdoc/markdown/literals.rb +0 -454
@@ -1,421 +1,425 @@
1
1
  # frozen_string_literal: true
2
- ##
3
- # Outputs RDoc markup as RDoc markup! (mostly)
2
+ module RDoc
3
+ class Markup
4
+ ##
5
+ # Outputs RDoc markup as RDoc markup! (mostly)
4
6
 
5
- class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
6
- DEFAULT_HEADINGS = {
7
- 1 => ['= ', ''],
8
- 2 => ['== ', ''],
9
- 3 => ['=== ', ''],
10
- 4 => ['==== ', ''],
11
- 5 => ['===== ', ''],
12
- 6 => ['====== ', '']
13
- }
14
- DEFAULT_HEADINGS.default = []
15
- DEFAULT_HEADINGS.freeze
7
+ class ToRdoc < Markup::Formatter
8
+ DEFAULT_HEADINGS = {
9
+ 1 => ['= ', ''],
10
+ 2 => ['== ', ''],
11
+ 3 => ['=== ', ''],
12
+ 4 => ['==== ', ''],
13
+ 5 => ['===== ', ''],
14
+ 6 => ['====== ', '']
15
+ }
16
+ DEFAULT_HEADINGS.default = []
17
+ DEFAULT_HEADINGS.freeze
16
18
 
17
- ##
18
- # Current indent amount for output in characters
19
+ ##
20
+ # Current indent amount for output in characters
19
21
 
20
- attr_accessor :indent
22
+ attr_accessor :indent
21
23
 
22
- ##
23
- # Output width in characters
24
+ ##
25
+ # Output width in characters
24
26
 
25
- attr_accessor :width
27
+ attr_accessor :width
26
28
 
27
- ##
28
- # Stack of current list indexes for alphabetic and numeric lists
29
+ ##
30
+ # Stack of current list indexes for alphabetic and numeric lists
29
31
 
30
- attr_reader :list_index
32
+ attr_reader :list_index
31
33
 
32
- ##
33
- # Stack of list types
34
+ ##
35
+ # Stack of list types
34
36
 
35
- attr_reader :list_type
37
+ attr_reader :list_type
36
38
 
37
- ##
38
- # Stack of list widths for indentation
39
+ ##
40
+ # Stack of list widths for indentation
39
41
 
40
- attr_reader :list_width
42
+ attr_reader :list_width
41
43
 
42
- ##
43
- # Prefix for the next list item. See #use_prefix
44
+ ##
45
+ # Prefix for the next list item. See #use_prefix
44
46
 
45
- attr_reader :prefix
47
+ attr_reader :prefix
46
48
 
47
- ##
48
- # Output accumulator
49
+ ##
50
+ # Output accumulator
49
51
 
50
- attr_reader :res
52
+ attr_reader :res
51
53
 
52
- ##
53
- # Creates a new formatter that will output (mostly) \RDoc markup
54
+ ##
55
+ # Creates a new formatter that will output (mostly) \RDoc markup
54
56
 
55
- def initialize
56
- super
57
+ def initialize
58
+ super
57
59
 
58
- @markup.add_regexp_handling(/\\\S/, :SUPPRESSED_CROSSREF)
59
- @width = 78
60
+ @markup.add_regexp_handling(/\\\S/, :SUPPRESSED_CROSSREF)
61
+ @width = 78
60
62
 
61
- @headings = DEFAULT_HEADINGS.dup
62
- @hard_break = "\n"
63
- end
64
-
65
- ##
66
- # Adds +blank_line+ to the output
67
-
68
- def accept_blank_line(blank_line)
69
- @res << "\n"
70
- end
71
-
72
- ##
73
- # Adds +paragraph+ to the output
74
-
75
- def accept_block_quote(block_quote)
76
- @indent += 2
63
+ @headings = DEFAULT_HEADINGS.dup
64
+ @hard_break = "\n"
65
+ end
77
66
 
78
- block_quote.parts.each do |part|
79
- @prefix = '> '
67
+ ##
68
+ # Adds +blank_line+ to the output
80
69
 
81
- part.accept self
82
- end
70
+ def accept_blank_line(blank_line)
71
+ @res << "\n"
72
+ end
83
73
 
84
- @indent -= 2
85
- end
74
+ ##
75
+ # Adds +paragraph+ to the output
86
76
 
87
- ##
88
- # Adds +heading+ to the output
77
+ def accept_block_quote(block_quote)
78
+ @indent += 2
89
79
 
90
- def accept_heading(heading)
91
- use_prefix or @res << ' ' * @indent
92
- @res << @headings[heading.level][0]
93
- @res << attributes(heading.text)
94
- @res << @headings[heading.level][1]
95
- @res << "\n"
96
- end
80
+ block_quote.parts.each do |part|
81
+ @prefix = '> '
97
82
 
98
- ##
99
- # Finishes consumption of +list+
83
+ part.accept self
84
+ end
100
85
 
101
- def accept_list_end(list)
102
- @list_index.pop
103
- @list_type.pop
104
- @list_width.pop
105
- end
86
+ @indent -= 2
87
+ end
106
88
 
107
- ##
108
- # Finishes consumption of +list_item+
109
-
110
- def accept_list_item_end(list_item)
111
- width = case @list_type.last
112
- when :BULLET then
113
- 2
114
- when :NOTE, :LABEL then
115
- if @prefix then
116
- @res << @prefix.strip
117
- @prefix = nil
118
- end
119
-
120
- @res << "\n"
121
- 2
122
- else
123
- bullet = @list_index.last.to_s
124
- @list_index[-1] = @list_index.last.succ
125
- bullet.length + 2
126
- end
127
-
128
- @indent -= width
129
- end
89
+ ##
90
+ # Adds +heading+ to the output
130
91
 
131
- ##
132
- # Prepares the visitor for consuming +list_item+
92
+ def accept_heading(heading)
93
+ use_prefix or @res << ' ' * @indent
94
+ @res << @headings[heading.level][0]
95
+ @res << attributes(heading.text)
96
+ @res << @headings[heading.level][1]
97
+ @res << "\n"
98
+ end
133
99
 
134
- def accept_list_item_start(list_item)
135
- type = @list_type.last
100
+ ##
101
+ # Finishes consumption of +list+
136
102
 
137
- case type
138
- when :NOTE, :LABEL then
139
- stripped_labels = Array(list_item.label).map do |label|
140
- attributes(label).strip
103
+ def accept_list_end(list)
104
+ @list_index.pop
105
+ @list_type.pop
106
+ @list_width.pop
141
107
  end
142
108
 
143
- bullets = case type
144
- when :NOTE
145
- stripped_labels.map { |b| "#{b}::" }
146
- when :LABEL
147
- stripped_labels.map { |b| "[#{b}]" }
109
+ ##
110
+ # Finishes consumption of +list_item+
111
+
112
+ def accept_list_item_end(list_item)
113
+ width = case @list_type.last
114
+ when :BULLET
115
+ 2
116
+ when :NOTE, :LABEL
117
+ if @prefix
118
+ @res << @prefix.strip
119
+ @prefix = nil
120
+ end
121
+
122
+ @res << "\n"
123
+ 2
124
+ else
125
+ bullet = @list_index.last.to_s
126
+ @list_index[-1] = @list_index.last.succ
127
+ bullet.length + 2
128
+ end
129
+
130
+ @indent -= width
148
131
  end
149
132
 
150
- bullets = bullets.join("\n")
151
- bullets << "\n" unless stripped_labels.empty?
152
-
153
- @prefix = ' ' * @indent
154
- @indent += 2
155
- @prefix << bullets + (' ' * @indent)
156
- else
157
- bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
158
- @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
159
- width = bullet.length + 1
160
- @indent += width
161
- end
162
- end
163
-
164
- ##
165
- # Prepares the visitor for consuming +list+
166
-
167
- def accept_list_start(list)
168
- case list.type
169
- when :BULLET then
170
- @list_index << nil
171
- @list_width << 1
172
- when :LABEL, :NOTE then
173
- @list_index << nil
174
- @list_width << 2
175
- when :LALPHA then
176
- @list_index << 'a'
177
- @list_width << list.items.length.to_s.length
178
- when :NUMBER then
179
- @list_index << 1
180
- @list_width << list.items.length.to_s.length
181
- when :UALPHA then
182
- @list_index << 'A'
183
- @list_width << list.items.length.to_s.length
184
- else
185
- raise RDoc::Error, "invalid list type #{list.type}"
186
- end
133
+ ##
134
+ # Prepares the visitor for consuming +list_item+
135
+
136
+ def accept_list_item_start(list_item)
137
+ type = @list_type.last
138
+
139
+ case type
140
+ when :NOTE, :LABEL
141
+ stripped_labels = Array(list_item.label).map do |label|
142
+ attributes(label).strip
143
+ end
144
+
145
+ bullets = case type
146
+ when :NOTE
147
+ stripped_labels.map { |b| "#{b}::" }
148
+ when :LABEL
149
+ stripped_labels.map { |b| "[#{b}]" }
150
+ end
151
+
152
+ bullets = bullets.join("\n")
153
+ bullets << "\n" unless stripped_labels.empty?
154
+
155
+ @prefix = ' ' * @indent
156
+ @indent += 2
157
+ @prefix << bullets + (' ' * @indent)
158
+ else
159
+ bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
160
+ @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
161
+ width = bullet.length + 1
162
+ @indent += width
163
+ end
164
+ end
187
165
 
188
- @list_type << list.type
189
- end
166
+ ##
167
+ # Prepares the visitor for consuming +list+
168
+
169
+ def accept_list_start(list)
170
+ case list.type
171
+ when :BULLET
172
+ @list_index << nil
173
+ @list_width << 1
174
+ when :LABEL, :NOTE
175
+ @list_index << nil
176
+ @list_width << 2
177
+ when :LALPHA
178
+ @list_index << 'a'
179
+ @list_width << list.items.length.to_s.length
180
+ when :NUMBER
181
+ @list_index << 1
182
+ @list_width << list.items.length.to_s.length
183
+ when :UALPHA
184
+ @list_index << 'A'
185
+ @list_width << list.items.length.to_s.length
186
+ else
187
+ raise Error, "invalid list type #{list.type}"
188
+ end
189
+
190
+ @list_type << list.type
191
+ end
190
192
 
191
- ##
192
- # Adds +paragraph+ to the output
193
+ ##
194
+ # Adds +paragraph+ to the output
193
195
 
194
- def accept_paragraph(paragraph)
195
- text = paragraph.text @hard_break
196
- wrap attributes text
197
- end
196
+ def accept_paragraph(paragraph)
197
+ text = paragraph.text @hard_break
198
+ wrap attributes text
199
+ end
198
200
 
199
- ##
200
- # Adds +paragraph+ to the output
201
+ ##
202
+ # Adds +paragraph+ to the output
201
203
 
202
- def accept_indented_paragraph(paragraph)
203
- @indent += paragraph.indent
204
- text = paragraph.text @hard_break
205
- wrap attributes text
206
- @indent -= paragraph.indent
207
- end
204
+ def accept_indented_paragraph(paragraph)
205
+ @indent += paragraph.indent
206
+ text = paragraph.text @hard_break
207
+ wrap attributes text
208
+ @indent -= paragraph.indent
209
+ end
208
210
 
209
- ##
210
- # Adds +raw+ to the output
211
+ ##
212
+ # Adds +raw+ to the output
211
213
 
212
- def accept_raw(raw)
213
- @res << raw.parts.join("\n")
214
- end
214
+ def accept_raw(raw)
215
+ @res << raw.parts.join("\n")
216
+ end
215
217
 
216
- ##
217
- # Adds +rule+ to the output
218
+ ##
219
+ # Adds +rule+ to the output
218
220
 
219
- def accept_rule(rule)
220
- use_prefix or @res << ' ' * @indent
221
- @res << '-' * (@width - @indent)
222
- @res << "\n"
223
- end
221
+ def accept_rule(rule)
222
+ use_prefix or @res << ' ' * @indent
223
+ @res << '-' * (@width - @indent)
224
+ @res << "\n"
225
+ end
224
226
 
225
- ##
226
- # Outputs +verbatim+ indented 2 columns
227
+ ##
228
+ # Outputs +verbatim+ indented 2 columns
227
229
 
228
- def accept_verbatim(verbatim)
229
- indent = ' ' * (@indent + 2)
230
+ def accept_verbatim(verbatim)
231
+ indent = ' ' * (@indent + 2)
230
232
 
231
- verbatim.parts.each do |part|
232
- @res << indent unless part == "\n"
233
- @res << part
234
- end
233
+ verbatim.parts.each do |part|
234
+ @res << indent unless part == "\n"
235
+ @res << part
236
+ end
235
237
 
236
- @res << "\n"
237
- end
238
+ @res << "\n"
239
+ end
238
240
 
239
- ##
240
- # Adds +table+ to the output
241
+ ##
242
+ # Adds +table+ to the output
243
+
244
+ def accept_table(header, body, aligns)
245
+ header = header.map { |h| attributes h }
246
+ body = body.map { |row| row.map { |t| attributes t } }
247
+ widths = header.zip(*body).map do |cols|
248
+ cols.compact.map { |col| calculate_text_width(col) }.max
249
+ end
250
+ aligns = aligns.map do |a|
251
+ case a
252
+ when nil, :center
253
+ :center
254
+ when :left
255
+ :ljust
256
+ when :right
257
+ :rjust
258
+ end
259
+ end
260
+ @res << header.zip(widths, aligns).map do |h, w, a|
261
+ extra_width = h.size - calculate_text_width(h)
262
+ h.__send__(a, w + extra_width)
263
+ end.join("|").rstrip << "\n"
264
+ @res << widths.map {|w| "-" * w }.join("|") << "\n"
265
+ body.each do |row|
266
+ @res << widths.zip(aligns).each_with_index.map do |(w, a), i|
267
+ t = row[i] || ""
268
+ extra_width = t.size - calculate_text_width(t)
269
+ t.__send__(a, w + extra_width)
270
+ end.join("|").rstrip << "\n"
271
+ end
272
+ end
241
273
 
242
- def accept_table(header, body, aligns)
243
- header = header.map { |h| attributes h }
244
- body = body.map { |row| row.map { |t| attributes t } }
245
- widths = header.zip(*body).map do |cols|
246
- cols.compact.map { |col| calculate_text_width(col) }.max
247
- end
248
- aligns = aligns.map do |a|
249
- case a
250
- when nil, :center
251
- :center
252
- when :left
253
- :ljust
254
- when :right
255
- :rjust
274
+ def calculate_text_width(text)
275
+ text.size
256
276
  end
257
- end
258
- @res << header.zip(widths, aligns).map do |h, w, a|
259
- extra_width = h.size - calculate_text_width(h)
260
- h.__send__(a, w + extra_width)
261
- end.join("|").rstrip << "\n"
262
- @res << widths.map {|w| "-" * w }.join("|") << "\n"
263
- body.each do |row|
264
- @res << widths.zip(aligns).each_with_index.map do |(w, a), i|
265
- t = row[i] || ""
266
- extra_width = t.size - calculate_text_width(t)
267
- t.__send__(a, w + extra_width)
268
- end.join("|").rstrip << "\n"
269
- end
270
- end
271
277
 
272
- def calculate_text_width(text)
273
- text.size
274
- end
278
+ def handle_PLAIN_TEXT(text)
279
+ add_text(text)
280
+ end
275
281
 
276
- def handle_PLAIN_TEXT(text)
277
- add_text(text)
278
- end
282
+ def handle_REGEXP_HANDLING_TEXT(text)
283
+ add_text(text)
284
+ end
279
285
 
280
- def handle_REGEXP_HANDLING_TEXT(text)
281
- add_text(text)
282
- end
286
+ def handle_BOLD(target)
287
+ on(:BOLD)
288
+ super
289
+ off(:BOLD)
290
+ end
283
291
 
284
- def handle_BOLD(target)
285
- on(:BOLD)
286
- super
287
- off(:BOLD)
288
- end
292
+ def handle_EM(target)
293
+ on(:EM)
294
+ super
295
+ off(:EM)
296
+ end
289
297
 
290
- def handle_EM(target)
291
- on(:EM)
292
- super
293
- off(:EM)
294
- end
298
+ def handle_BOLD_WORD(word)
299
+ on(:BOLD)
300
+ super
301
+ off(:BOLD)
302
+ end
295
303
 
296
- def handle_BOLD_WORD(word)
297
- on(:BOLD)
298
- super
299
- off(:BOLD)
300
- end
304
+ def handle_EM_WORD(word)
305
+ on(:EM)
306
+ super
307
+ off(:EM)
308
+ end
301
309
 
302
- def handle_EM_WORD(word)
303
- on(:EM)
304
- super
305
- off(:EM)
306
- end
310
+ def handle_TT(code)
311
+ on(:TT)
312
+ super
313
+ off(:TT)
314
+ end
307
315
 
308
- def handle_TT(code)
309
- on(:TT)
310
- super
311
- off(:TT)
312
- end
316
+ def handle_STRIKE(target)
317
+ on(:STRIKE)
318
+ super
319
+ off(:STRIKE)
320
+ end
313
321
 
314
- def handle_STRIKE(target)
315
- on(:STRIKE)
316
- super
317
- off(:STRIKE)
318
- end
322
+ def handle_HARD_BREAK
323
+ add_text("\n")
324
+ end
319
325
 
320
- def handle_HARD_BREAK
321
- add_text("\n")
322
- end
326
+ def handle_TIDYLINK(label_part, url)
327
+ super
328
+ add_text("( #{url} )")
329
+ end
323
330
 
324
- def handle_TIDYLINK(label_part, url)
325
- super
326
- add_text("( #{url} )")
327
- end
331
+ def handle_inline(text, initial_attributes = [])
332
+ @attributes = Hash.new(0)
333
+ initial_attributes.each { |attr| on(attr) }
334
+ out = @inline_output = +''
335
+ super(text)
336
+ @inline_output = nil
337
+ out
338
+ end
328
339
 
329
- def handle_inline(text, initial_attributes = [])
330
- @attributes = Hash.new(0)
331
- initial_attributes.each { |attr| on(attr) }
332
- out = @inline_output = +''
333
- super(text)
334
- @inline_output = nil
335
- out
336
- end
340
+ def on(attr)
341
+ @attributes[attr] += 1
342
+ end
337
343
 
338
- def on(attr)
339
- @attributes[attr] += 1
340
- end
344
+ def off(attr)
345
+ @attributes[attr] -= 1
346
+ @attributes.delete(attr) if @attributes[attr] == 0
347
+ end
341
348
 
342
- def off(attr)
343
- @attributes[attr] -= 1
344
- @attributes.delete(attr) if @attributes[attr] == 0
345
- end
349
+ def add_text(text)
350
+ emit_inline(text)
351
+ end
346
352
 
347
- def add_text(text)
348
- emit_inline(text)
349
- end
353
+ def emit_inline(text)
354
+ @inline_output << text
355
+ end
350
356
 
351
- def emit_inline(text)
352
- @inline_output << text
353
- end
357
+ ##
358
+ # Applies attribute-specific markup to +text+ using RDoc::Markup::InlineParser
354
359
 
355
- ##
356
- # Applies attribute-specific markup to +text+ using RDoc::Markup::InlineParser
360
+ def attributes(text)
361
+ handle_inline(text)
362
+ end
357
363
 
358
- def attributes(text)
359
- handle_inline(text)
360
- end
364
+ ##
365
+ # Returns the generated output
361
366
 
362
- ##
363
- # Returns the generated output
367
+ def end_accepting
368
+ @res.join
369
+ end
364
370
 
365
- def end_accepting
366
- @res.join
367
- end
371
+ ##
372
+ # Removes preceding \\ from the suppressed crossref +target+
368
373
 
369
- ##
370
- # Removes preceding \\ from the suppressed crossref +target+
374
+ def handle_regexp_SUPPRESSED_CROSSREF(text)
375
+ text.sub('\\', '')
376
+ end
371
377
 
372
- def handle_regexp_SUPPRESSED_CROSSREF(text)
373
- text.sub('\\', '')
374
- end
378
+ ##
379
+ # Prepares the visitor for text generation
375
380
 
376
- ##
377
- # Prepares the visitor for text generation
381
+ def start_accepting
382
+ @res = [""]
383
+ @indent = 0
384
+ @prefix = nil
378
385
 
379
- def start_accepting
380
- @res = [""]
381
- @indent = 0
382
- @prefix = nil
386
+ @list_index = []
387
+ @list_type = []
388
+ @list_width = []
389
+ end
383
390
 
384
- @list_index = []
385
- @list_type = []
386
- @list_width = []
387
- end
391
+ ##
392
+ # Adds the stored #prefix to the output and clears it. Lists generate a
393
+ # prefix for later consumption.
388
394
 
389
- ##
390
- # Adds the stored #prefix to the output and clears it. Lists generate a
391
- # prefix for later consumption.
395
+ def use_prefix
396
+ prefix, @prefix = @prefix, nil
397
+ @res << prefix if prefix
392
398
 
393
- def use_prefix
394
- prefix, @prefix = @prefix, nil
395
- @res << prefix if prefix
399
+ prefix
400
+ end
396
401
 
397
- prefix
398
- end
402
+ ##
403
+ # Wraps +text+ to #width
399
404
 
400
- ##
401
- # Wraps +text+ to #width
405
+ def wrap(text)
406
+ return unless text && !text.empty?
402
407
 
403
- def wrap(text)
404
- return unless text && !text.empty?
408
+ text_len = @width - @indent
405
409
 
406
- text_len = @width - @indent
410
+ text_len = 20 if text_len < 20
407
411
 
408
- text_len = 20 if text_len < 20
412
+ next_prefix = ' ' * @indent
409
413
 
410
- next_prefix = ' ' * @indent
414
+ prefix = @prefix || next_prefix
415
+ @prefix = nil
411
416
 
412
- prefix = @prefix || next_prefix
413
- @prefix = nil
417
+ text.scan(/\G(?:([^ \n]{#{text_len}})(?=[^ \n])|(.{1,#{text_len}})(?:[ \n]|\z))/) do
418
+ @res << prefix << ($1 || $2) << "\n"
419
+ prefix = next_prefix
420
+ end
421
+ end
414
422
 
415
- text.scan(/\G(?:([^ \n]{#{text_len}})(?=[^ \n])|(.{1,#{text_len}})(?:[ \n]|\z))/) do
416
- @res << prefix << ($1 || $2) << "\n"
417
- prefix = next_prefix
418
423
  end
419
424
  end
420
-
421
425
  end