rdoc 5.1.0 → 6.13.1

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 (179) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.rdoc +5 -6
  3. data/ExampleMarkdown.md +2 -0
  4. data/ExampleRDoc.rdoc +2 -0
  5. data/History.rdoc +68 -66
  6. data/LEGAL.rdoc +1 -1
  7. data/LICENSE.rdoc +2 -0
  8. data/README.rdoc +18 -6
  9. data/RI.md +842 -0
  10. data/TODO.rdoc +8 -7
  11. data/exe/rdoc +0 -1
  12. data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -12
  13. data/lib/rdoc/{anon_class.rb → code_object/anon_class.rb} +1 -2
  14. data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +83 -26
  15. data/lib/rdoc/{attr.rb → code_object/attr.rb} +5 -9
  16. data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +112 -24
  17. data/lib/rdoc/{constant.rb → code_object/constant.rb} +4 -5
  18. data/lib/rdoc/{context → code_object/context}/section.rb +13 -83
  19. data/lib/rdoc/{context.rb → code_object/context.rb} +69 -70
  20. data/lib/rdoc/{extend.rb → code_object/extend.rb} +1 -2
  21. data/lib/rdoc/{ghost_method.rb → code_object/ghost_method.rb} +1 -2
  22. data/lib/rdoc/{include.rb → code_object/include.rb} +1 -2
  23. data/lib/rdoc/{meta_method.rb → code_object/meta_method.rb} +1 -2
  24. data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +22 -31
  25. data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +1 -2
  26. data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +4 -5
  27. data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
  28. data/lib/rdoc/{require.rb → code_object/require.rb} +2 -3
  29. data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +6 -2
  30. data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +22 -32
  31. data/lib/rdoc/code_object.rb +8 -41
  32. data/lib/rdoc/code_objects.rb +2 -3
  33. data/lib/rdoc/comment.rb +48 -41
  34. data/lib/rdoc/cross_reference.rb +77 -33
  35. data/lib/rdoc/encoding.rb +50 -38
  36. data/lib/rdoc/erb_partial.rb +2 -3
  37. data/lib/rdoc/erbio.rb +4 -5
  38. data/lib/rdoc/generator/darkfish.rb +178 -125
  39. data/lib/rdoc/generator/json_index.rb +9 -22
  40. data/lib/rdoc/generator/markup.rb +6 -17
  41. data/lib/rdoc/generator/pot/message_extractor.rb +4 -4
  42. data/lib/rdoc/generator/pot/po.rb +3 -3
  43. data/lib/rdoc/generator/pot/po_entry.rb +12 -12
  44. data/lib/rdoc/generator/pot.rb +4 -8
  45. data/lib/rdoc/generator/ri.rb +1 -2
  46. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
  47. data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -12
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +19 -10
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +26 -6
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +1 -1
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  57. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +27 -6
  58. data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
  59. data/lib/rdoc/generator/template/darkfish/class.rhtml +125 -78
  60. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +430 -339
  61. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/index.rhtml +13 -13
  64. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -92
  65. data/lib/rdoc/generator/template/darkfish/js/search.js +35 -34
  66. data/lib/rdoc/generator/template/darkfish/page.rhtml +5 -5
  67. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +10 -8
  68. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +20 -18
  69. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +32 -20
  70. data/lib/rdoc/generator/template/json_index/js/navigation.js +12 -49
  71. data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
  72. data/lib/rdoc/generator.rb +6 -6
  73. data/lib/rdoc/i18n/locale.rb +1 -1
  74. data/lib/rdoc/i18n/text.rb +5 -5
  75. data/lib/rdoc/i18n.rb +4 -4
  76. data/lib/rdoc/known_classes.rb +6 -5
  77. data/lib/rdoc/markdown/entities.rb +1 -2
  78. data/lib/rdoc/markdown/literals.kpeg +1 -2
  79. data/lib/rdoc/markdown/literals.rb +99 -50
  80. data/lib/rdoc/markdown.kpeg +115 -58
  81. data/lib/rdoc/markdown.rb +1584 -902
  82. data/lib/rdoc/markup/attr_changer.rb +1 -2
  83. data/lib/rdoc/markup/attr_span.rb +9 -4
  84. data/lib/rdoc/markup/attribute_manager.rb +118 -57
  85. data/lib/rdoc/markup/attributes.rb +7 -8
  86. data/lib/rdoc/markup/blank_line.rb +1 -2
  87. data/lib/rdoc/markup/block_quote.rb +1 -2
  88. data/lib/rdoc/markup/document.rb +1 -2
  89. data/lib/rdoc/markup/formatter.rb +44 -37
  90. data/lib/rdoc/markup/hard_break.rb +1 -2
  91. data/lib/rdoc/markup/heading.rb +11 -6
  92. data/lib/rdoc/markup/include.rb +1 -2
  93. data/lib/rdoc/markup/indented_paragraph.rb +1 -2
  94. data/lib/rdoc/markup/list.rb +1 -2
  95. data/lib/rdoc/markup/list_item.rb +1 -2
  96. data/lib/rdoc/markup/paragraph.rb +1 -2
  97. data/lib/rdoc/markup/parser.rb +90 -48
  98. data/lib/rdoc/markup/pre_process.rb +38 -11
  99. data/lib/rdoc/markup/raw.rb +1 -2
  100. data/lib/rdoc/markup/regexp_handling.rb +40 -0
  101. data/lib/rdoc/markup/rule.rb +1 -2
  102. data/lib/rdoc/markup/table.rb +56 -0
  103. data/lib/rdoc/markup/to_ansi.rb +1 -2
  104. data/lib/rdoc/markup/to_bs.rb +30 -5
  105. data/lib/rdoc/markup/to_html.rb +95 -40
  106. data/lib/rdoc/markup/to_html_crossref.rb +108 -43
  107. data/lib/rdoc/markup/to_html_snippet.rb +13 -11
  108. data/lib/rdoc/markup/to_joined_paragraph.rb +6 -32
  109. data/lib/rdoc/markup/to_label.rb +11 -12
  110. data/lib/rdoc/markup/to_markdown.rb +13 -14
  111. data/lib/rdoc/markup/to_rdoc.rb +49 -31
  112. data/lib/rdoc/markup/to_table_of_contents.rb +2 -2
  113. data/lib/rdoc/markup/to_test.rb +1 -2
  114. data/lib/rdoc/markup/to_tt_only.rb +3 -4
  115. data/lib/rdoc/markup/verbatim.rb +1 -2
  116. data/lib/rdoc/markup.rb +64 -694
  117. data/lib/rdoc/options.rb +226 -44
  118. data/lib/rdoc/parser/c.rb +231 -246
  119. data/lib/rdoc/parser/changelog.rb +169 -23
  120. data/lib/rdoc/parser/markdown.rb +1 -3
  121. data/lib/rdoc/parser/prism_ruby.rb +1092 -0
  122. data/lib/rdoc/parser/rd.rb +1 -2
  123. data/lib/rdoc/parser/ripper_state_lex.rb +302 -0
  124. data/lib/rdoc/parser/ruby.rb +695 -478
  125. data/lib/rdoc/parser/ruby_tools.rb +33 -36
  126. data/lib/rdoc/parser/simple.rb +4 -4
  127. data/lib/rdoc/parser/text.rb +1 -2
  128. data/lib/rdoc/parser.rb +37 -42
  129. data/lib/rdoc/rd/block_parser.rb +708 -57
  130. data/lib/rdoc/rd/block_parser.ry +15 -11
  131. data/lib/rdoc/rd/inline.rb +5 -6
  132. data/lib/rdoc/rd/inline_parser.rb +787 -140
  133. data/lib/rdoc/rd/inline_parser.ry +1 -1
  134. data/lib/rdoc/rd.rb +4 -5
  135. data/lib/rdoc/rdoc.rb +72 -87
  136. data/lib/rdoc/ri/driver.rb +236 -152
  137. data/lib/rdoc/ri/formatter.rb +1 -1
  138. data/lib/rdoc/ri/paths.rb +4 -18
  139. data/lib/rdoc/ri/store.rb +1 -2
  140. data/lib/rdoc/ri/task.rb +2 -2
  141. data/lib/rdoc/ri.rb +5 -6
  142. data/lib/rdoc/rubygems_hook.rb +98 -20
  143. data/lib/rdoc/servlet.rb +30 -20
  144. data/lib/rdoc/stats/normal.rb +24 -18
  145. data/lib/rdoc/stats/quiet.rb +1 -2
  146. data/lib/rdoc/stats/verbose.rb +1 -3
  147. data/lib/rdoc/stats.rb +6 -7
  148. data/lib/rdoc/store.rb +84 -55
  149. data/lib/rdoc/task.rb +35 -10
  150. data/lib/rdoc/text.rb +40 -27
  151. data/lib/rdoc/token_stream.rb +56 -34
  152. data/lib/rdoc/tom_doc.rb +18 -19
  153. data/lib/rdoc/version.rb +10 -0
  154. data/lib/rdoc.rb +80 -56
  155. data/lib/rubygems_plugin.rb +23 -0
  156. data/man/ri.1 +247 -0
  157. metadata +45 -99
  158. data/.document +0 -5
  159. data/.gitignore +0 -13
  160. data/.travis.yml +0 -24
  161. data/Gemfile +0 -3
  162. data/RI.rdoc +0 -57
  163. data/Rakefile +0 -133
  164. data/bin/console +0 -7
  165. data/bin/setup +0 -6
  166. data/lib/gauntlet_rdoc.rb +0 -82
  167. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  168. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
  169. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
  170. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
  171. data/lib/rdoc/generator/template/json_index/.document +0 -1
  172. data/lib/rdoc/markup/formatter_test_case.rb +0 -764
  173. data/lib/rdoc/markup/inline.rb +0 -2
  174. data/lib/rdoc/markup/special.rb +0 -41
  175. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -115
  176. data/lib/rdoc/ruby_lex.rb +0 -1367
  177. data/lib/rdoc/ruby_token.rb +0 -461
  178. data/lib/rdoc/test_case.rb +0 -204
  179. data/rdoc.gemspec +0 -57
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  class RDoc::Markup
3
3
 
4
4
  AttrChanger = Struct.new :turn_on, :turn_off # :nodoc:
@@ -20,4 +20,3 @@ class RDoc::Markup::AttrChanger
20
20
  end
21
21
 
22
22
  end
23
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # An array of attributes which parallels the characters in a string.
4
4
 
@@ -7,16 +7,22 @@ class RDoc::Markup::AttrSpan
7
7
  ##
8
8
  # Creates a new AttrSpan for +length+ characters
9
9
 
10
- def initialize(length)
10
+ def initialize(length, exclusive)
11
11
  @attrs = Array.new(length, 0)
12
+ @exclusive = exclusive
12
13
  end
13
14
 
14
15
  ##
15
16
  # Toggles +bits+ from +start+ to +length+
16
17
  def set_attrs(start, length, bits)
18
+ updated = false
17
19
  for i in start ... (start+length)
18
- @attrs[i] |= bits
20
+ if (@exclusive & @attrs[i]) == 0 || (@exclusive & bits) != 0
21
+ @attrs[i] |= bits
22
+ updated = true
23
+ end
19
24
  end
25
+ updated
20
26
  end
21
27
 
22
28
  ##
@@ -27,4 +33,3 @@ class RDoc::Markup::AttrSpan
27
33
  end
28
34
 
29
35
  end
30
-
@@ -1,8 +1,19 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # Manages changes of attributes in a block of text
4
5
 
5
6
  class RDoc::Markup::AttributeManager
7
+ unless ::MatchData.method_defined?(:match_length)
8
+ using ::Module.new {
9
+ refine(::MatchData) {
10
+ def match_length(nth) # :nodoc:
11
+ b, e = offset(nth)
12
+ e - b if b
13
+ end
14
+ }
15
+ }
16
+ end
6
17
 
7
18
  ##
8
19
  # The NUL character
@@ -53,10 +64,14 @@ class RDoc::Markup::AttributeManager
53
64
  attr_reader :protectable
54
65
 
55
66
  ##
56
- # And this maps _special_ sequences to a name. A special sequence is
57
- # something like a WikiWord
67
+ # And this maps _regexp handling_ sequences to a name. A regexp handling
68
+ # sequence is something like a WikiWord
69
+
70
+ attr_reader :regexp_handlings
58
71
 
59
- attr_reader :special
72
+ ##
73
+ # A bits of exclusive maps
74
+ attr_reader :exclusive_bitmap
60
75
 
61
76
  ##
62
77
  # Creates a new attribute manager that understands bold, emphasized and
@@ -66,19 +81,20 @@ class RDoc::Markup::AttributeManager
66
81
  @html_tags = {}
67
82
  @matching_word_pairs = {}
68
83
  @protectable = %w[<]
69
- @special = []
84
+ @regexp_handlings = []
70
85
  @word_pair_map = {}
86
+ @exclusive_bitmap = 0
71
87
  @attributes = RDoc::Markup::Attributes.new
72
88
 
73
- add_word_pair "*", "*", :BOLD
74
- add_word_pair "_", "_", :EM
75
- add_word_pair "+", "+", :TT
89
+ add_word_pair "*", "*", :BOLD, true
90
+ add_word_pair "_", "_", :EM, true
91
+ add_word_pair "+", "+", :TT, true
76
92
 
77
- add_html "em", :EM
78
- add_html "i", :EM
79
- add_html "b", :BOLD
80
- add_html "tt", :TT
81
- add_html "code", :TT
93
+ add_html "em", :EM, true
94
+ add_html "i", :EM, true
95
+ add_html "b", :BOLD, true
96
+ add_html "tt", :TT, true
97
+ add_html "code", :TT, true
82
98
  end
83
99
 
84
100
  ##
@@ -122,29 +138,63 @@ class RDoc::Markup::AttributeManager
122
138
  res
123
139
  end
124
140
 
141
+ # :nodoc:
142
+ def exclusive?(attr)
143
+ (attr & @exclusive_bitmap) != 0
144
+ end
145
+
146
+ NON_PRINTING_START = "\1" # :nodoc:
147
+ NON_PRINTING_END = "\2" # :nodoc:
148
+
125
149
  ##
126
150
  # Map attributes like <b>text</b>to the sequence
127
151
  # \001\002<char>\001\003<char>, where <char> is a per-attribute specific
128
152
  # character
129
153
 
130
- def convert_attrs(str, attrs)
131
- # first do matching ones
132
- tags = @matching_word_pairs.keys.join("")
133
-
134
- re = /(^|\W)([#{tags}])([#\\]?[\w:.\/-]+?\S?)\2(\W|$)/
154
+ def convert_attrs(str, attrs, exclusive = false)
155
+ convert_attrs_matching_word_pairs(str, attrs, exclusive)
156
+ convert_attrs_word_pair_map(str, attrs, exclusive)
157
+ end
135
158
 
136
- 1 while str.gsub!(re) do
137
- attr = @matching_word_pairs[$2]
138
- attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr)
139
- $1 + NULL * $2.length + $3 + NULL * $2.length + $4
140
- end
159
+ # :nodoc:
160
+ def convert_attrs_matching_word_pairs(str, attrs, exclusive)
161
+ # first do matching ones
162
+ tags = @matching_word_pairs.select { |start, bitmap|
163
+ exclusive == exclusive?(bitmap)
164
+ }.keys
165
+ return if tags.empty?
166
+ tags = "[#{tags.join("")}](?!#{PROTECT_ATTR})"
167
+ all_tags = "[#{@matching_word_pairs.keys.join("")}](?!#{PROTECT_ATTR})"
168
+
169
+ re = /(?:^|\W|#{all_tags})\K(#{tags})(\1*[#\\]?[\w:#{PROTECT_ATTR}.\/\[\]-]+?\S?)\1(?!\1)(?=#{all_tags}|\W|$)/
170
+
171
+ 1 while str.gsub!(re) { |orig|
172
+ a, w = (m = $~).values_at(1, 2)
173
+ attr = @matching_word_pairs[a]
174
+ if attrs.set_attrs(m.begin(2), w.length, attr)
175
+ a = NULL * a.length
176
+ else
177
+ a = NON_PRINTING_START + a + NON_PRINTING_END
178
+ end
179
+ a + w + a
180
+ }
181
+ str.delete!(NON_PRINTING_START + NON_PRINTING_END)
182
+ end
141
183
 
184
+ # :nodoc:
185
+ def convert_attrs_word_pair_map(str, attrs, exclusive)
142
186
  # then non-matching
143
187
  unless @word_pair_map.empty? then
144
188
  @word_pair_map.each do |regexp, attr|
145
- str.gsub!(regexp) {
146
- attrs.set_attrs($`.length + $1.length, $2.length, attr)
147
- NULL * $1.length + $2 + NULL * $3.length
189
+ next unless exclusive == exclusive?(attr)
190
+ 1 while str.gsub!(regexp) { |orig|
191
+ w = (m = ($~))[2]
192
+ updated = attrs.set_attrs(m.begin(2), w.length, attr)
193
+ if updated
194
+ NULL * m.match_length(1) + w + NULL * m.match_length(3)
195
+ else
196
+ orig
197
+ end
148
198
  }
149
199
  end
150
200
  end
@@ -153,35 +203,38 @@ class RDoc::Markup::AttributeManager
153
203
  ##
154
204
  # Converts HTML tags to RDoc attributes
155
205
 
156
- def convert_html(str, attrs)
157
- tags = @html_tags.keys.join '|'
206
+ def convert_html(str, attrs, exclusive = false)
207
+ tags = @html_tags.select { |start, bitmap|
208
+ exclusive == exclusive?(bitmap)
209
+ }.keys.join '|'
158
210
 
159
- 1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) {
211
+ 1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) { |orig|
160
212
  attr = @html_tags[$1.downcase]
161
- html_length = $1.length + 2
213
+ html_length = $~.match_length(1) + 2 # "<>".length
162
214
  seq = NULL * html_length
163
- attrs.set_attrs($`.length + html_length, $2.length, attr)
215
+ attrs.set_attrs($~.begin(2), $~.match_length(2), attr)
164
216
  seq + $2 + seq + NULL
165
217
  }
166
218
  end
167
219
 
168
220
  ##
169
- # Converts special sequences to RDoc attributes
221
+ # Converts regexp handling sequences to RDoc attributes
170
222
 
171
- def convert_specials str, attrs
172
- @special.each do |regexp, attribute|
223
+ def convert_regexp_handlings str, attrs, exclusive = false
224
+ @regexp_handlings.each do |regexp, attribute|
225
+ next unless exclusive == exclusive?(attribute)
173
226
  str.scan(regexp) do
174
227
  capture = $~.size == 1 ? 0 : 1
175
228
 
176
229
  s, e = $~.offset capture
177
230
 
178
- attrs.set_attrs s, e - s, attribute | @attributes.special
231
+ attrs.set_attrs s, e - s, attribute | @attributes.regexp_handling
179
232
  end
180
233
  end
181
234
  end
182
235
 
183
236
  ##
184
- # Escapes special sequences of text to prevent conversion to RDoc
237
+ # Escapes regexp handling sequences of text to prevent conversion to RDoc
185
238
 
186
239
  def mask_protected_sequences
187
240
  # protect __send__, __FILE__, etc.
@@ -193,7 +246,7 @@ class RDoc::Markup::AttributeManager
193
246
  end
194
247
 
195
248
  ##
196
- # Unescapes special sequences of text
249
+ # Unescapes regexp handling sequences of text
197
250
 
198
251
  def unmask_protected_sequences
199
252
  @str.gsub!(/(.)#{PROTECT_ATTR}/, "\\1\000")
@@ -205,9 +258,9 @@ class RDoc::Markup::AttributeManager
205
258
  #
206
259
  # am.add_word_pair '*', '*', :BOLD
207
260
 
208
- def add_word_pair(start, stop, name)
261
+ def add_word_pair(start, stop, name, exclusive = false)
209
262
  raise ArgumentError, "Word flags may not start with '<'" if
210
- start[0,1] == '<'
263
+ start[0, 1] == '<'
211
264
 
212
265
  bitmap = @attributes.bitmap_for name
213
266
 
@@ -218,8 +271,10 @@ class RDoc::Markup::AttributeManager
218
271
  @word_pair_map[pattern] = bitmap
219
272
  end
220
273
 
221
- @protectable << start[0,1]
274
+ @protectable << start[0, 1]
222
275
  @protectable.uniq!
276
+
277
+ @exclusive_bitmap |= bitmap if exclusive
223
278
  end
224
279
 
225
280
  ##
@@ -228,33 +283,40 @@ class RDoc::Markup::AttributeManager
228
283
  #
229
284
  # am.add_html 'em', :EM
230
285
 
231
- def add_html(tag, name)
232
- @html_tags[tag.downcase] = @attributes.bitmap_for name
286
+ def add_html(tag, name, exclusive = false)
287
+ bitmap = @attributes.bitmap_for name
288
+ @html_tags[tag.downcase] = bitmap
289
+ @exclusive_bitmap |= bitmap if exclusive
233
290
  end
234
291
 
235
292
  ##
236
- # Adds a special handler for +pattern+ with +name+. A simple URL handler
293
+ # Adds a regexp handling for +pattern+ with +name+. A simple URL handler
237
294
  # would be:
238
295
  #
239
- # @am.add_special(/((https?:)\S+\w)/, :HYPERLINK)
296
+ # @am.add_regexp_handling(/((https?:)\S+\w)/, :HYPERLINK)
240
297
 
241
- def add_special pattern, name
242
- @special << [pattern, @attributes.bitmap_for(name)]
298
+ def add_regexp_handling pattern, name, exclusive = false
299
+ bitmap = @attributes.bitmap_for(name)
300
+ @regexp_handlings << [pattern, bitmap]
301
+ @exclusive_bitmap |= bitmap if exclusive
243
302
  end
244
303
 
245
304
  ##
246
- # Processes +str+ converting attributes, HTML and specials
305
+ # Processes +str+ converting attributes, HTML and regexp handlings
247
306
 
248
307
  def flow str
249
- @str = str
308
+ @str = str.dup
250
309
 
251
310
  mask_protected_sequences
252
311
 
253
- @attrs = RDoc::Markup::AttrSpan.new @str.length
312
+ @attrs = RDoc::Markup::AttrSpan.new @str.length, @exclusive_bitmap
254
313
 
255
- convert_attrs @str, @attrs
256
- convert_html @str, @attrs
257
- convert_specials @str, @attrs
314
+ convert_attrs @str, @attrs, true
315
+ convert_html @str, @attrs, true
316
+ convert_regexp_handlings @str, @attrs, true
317
+ convert_attrs @str, @attrs
318
+ convert_html @str, @attrs
319
+ convert_regexp_handlings @str, @attrs
258
320
 
259
321
  unmask_protected_sequences
260
322
 
@@ -312,12 +374,12 @@ class RDoc::Markup::AttributeManager
312
374
  res << change_attribute(current_attr, new_attr)
313
375
  current_attr = new_attr
314
376
 
315
- if (current_attr & @attributes.special) != 0 then
377
+ if (current_attr & @attributes.regexp_handling) != 0 then
316
378
  i += 1 while
317
- i < str_len and (@attrs[i] & @attributes.special) != 0
379
+ i < str_len and (@attrs[i] & @attributes.regexp_handling) != 0
318
380
 
319
- res << RDoc::Markup::Special.new(current_attr,
320
- copy_string(start_pos, i))
381
+ res << RDoc::Markup::RegexpHandling.new(current_attr,
382
+ copy_string(start_pos, i))
321
383
  start_pos = i
322
384
  next
323
385
  end
@@ -341,4 +403,3 @@ class RDoc::Markup::AttributeManager
341
403
  end
342
404
 
343
405
  end
344
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # We manage a set of attributes. Each attribute has a symbol name and a bit
4
4
  # value.
@@ -6,21 +6,21 @@
6
6
  class RDoc::Markup::Attributes
7
7
 
8
8
  ##
9
- # The special attribute type. See RDoc::Markup#add_special
9
+ # The regexp handling attribute type. See RDoc::Markup#add_regexp_handling
10
10
 
11
- attr_reader :special
11
+ attr_reader :regexp_handling
12
12
 
13
13
  ##
14
14
  # Creates a new attributes set.
15
15
 
16
16
  def initialize
17
- @special = 1
17
+ @regexp_handling = 1
18
18
 
19
19
  @name_to_bitmap = [
20
- [:_SPECIAL_, @special],
20
+ [:_REGEXP_HANDLING_, @regexp_handling],
21
21
  ]
22
22
 
23
- @next_bitmap = @special << 1
23
+ @next_bitmap = @regexp_handling << 1
24
24
  end
25
25
 
26
26
  ##
@@ -61,11 +61,10 @@ class RDoc::Markup::Attributes
61
61
  return enum_for __method__, bitmap unless block_given?
62
62
 
63
63
  @name_to_bitmap.each do |name, bit|
64
- next if bit == @special
64
+ next if bit == @regexp_handling
65
65
 
66
66
  yield name.to_s if (bitmap & bit) != 0
67
67
  end
68
68
  end
69
69
 
70
70
  end
71
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # An empty line. This class is a singleton.
4
4
 
@@ -25,4 +25,3 @@ class RDoc::Markup::BlankLine
25
25
  end
26
26
 
27
27
  end
28
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A quoted section which contains markup items.
4
4
 
@@ -12,4 +12,3 @@ class RDoc::Markup::BlockQuote < RDoc::Markup::Raw
12
12
  end
13
13
 
14
14
  end
15
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A Document containing lists, headings, paragraphs, etc.
4
4
 
@@ -162,4 +162,3 @@ class RDoc::Markup::Document
162
162
  end
163
163
 
164
164
  end
165
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # Base class for RDoc markup formatters
4
4
  #
@@ -50,7 +50,7 @@ class RDoc::Markup::Formatter
50
50
 
51
51
  @markup = markup || RDoc::Markup.new
52
52
  @am = @markup.attribute_manager
53
- @am.add_special(/<br>/, :HARD_BREAK)
53
+ @am.add_regexp_handling(/<br>/, :HARD_BREAK)
54
54
 
55
55
  @attributes = @am.attributes
56
56
 
@@ -78,23 +78,24 @@ class RDoc::Markup::Formatter
78
78
  end
79
79
 
80
80
  ##
81
- # Adds a special for links of the form rdoc-...:
81
+ # Adds a regexp handling for links of the form rdoc-...:
82
82
 
83
- def add_special_RDOCLINK
84
- @markup.add_special(/rdoc-[a-z]+:[^\s\]]+/, :RDOCLINK)
83
+ def add_regexp_handling_RDOCLINK
84
+ @markup.add_regexp_handling(/rdoc-[a-z]+:[^\s\]]+/, :RDOCLINK)
85
85
  end
86
86
 
87
87
  ##
88
- # Adds a special for links of the form {<text>}[<url>] and <word>[<url>]
88
+ # Adds a regexp handling for links of the form {<text>}[<url>] and
89
+ # <word>[<url>]
89
90
 
90
- def add_special_TIDYLINK
91
- @markup.add_special(/(?:
92
- \{.*?\} | # multi-word label
93
- \b[^\s{}]+? # single-word label
94
- )
91
+ def add_regexp_handling_TIDYLINK
92
+ @markup.add_regexp_handling(/(?:
93
+ \{[^{}]*\} | # multi-word label
94
+ \b[^\s{}]+? # single-word label
95
+ )
95
96
 
96
- \[\S+?\] # link target
97
- /x, :TIDYLINK)
97
+ \[\S+?\] # link target
98
+ /x, :TIDYLINK)
98
99
  end
99
100
 
100
101
  ##
@@ -133,8 +134,8 @@ class RDoc::Markup::Formatter
133
134
  when RDoc::Markup::AttrChanger then
134
135
  off_tags res, item
135
136
  on_tags res, item
136
- when RDoc::Markup::Special then
137
- res << convert_special(item)
137
+ when RDoc::Markup::RegexpHandling then
138
+ res << convert_regexp_handling(item)
138
139
  else
139
140
  raise "Unknown flow element: #{item.inspect}"
140
141
  end
@@ -144,29 +145,29 @@ class RDoc::Markup::Formatter
144
145
  end
145
146
 
146
147
  ##
147
- # Converts added specials. See RDoc::Markup#add_special
148
+ # Converts added regexp handlings. See RDoc::Markup#add_regexp_handling
148
149
 
149
- def convert_special special
150
- return special.text if in_tt?
150
+ def convert_regexp_handling target
151
+ return target.text if in_tt?
151
152
 
152
153
  handled = false
153
154
 
154
- @attributes.each_name_of special.type do |name|
155
- method_name = "handle_special_#{name}"
155
+ @attributes.each_name_of target.type do |name|
156
+ method_name = "handle_regexp_#{name}"
156
157
 
157
158
  if respond_to? method_name then
158
- special.text = send method_name, special
159
+ target.text = public_send method_name, target
159
160
  handled = true
160
161
  end
161
162
  end
162
163
 
163
164
  unless handled then
164
- special_name = @attributes.as_string special.type
165
+ target_name = @attributes.as_string target.type
165
166
 
166
- raise RDoc::Error, "Unhandled special #{special_name}: #{special}"
167
+ raise RDoc::Error, "Unhandled regexp handling #{target_name}: #{target}"
167
168
  end
168
169
 
169
- special.text
170
+ target.text
170
171
  end
171
172
 
172
173
  ##
@@ -194,18 +195,20 @@ class RDoc::Markup::Formatter
194
195
  @in_tt > 0
195
196
  end
196
197
 
198
+ def tt_tag? attr_mask, reverse = false
199
+ each_attr_tag(attr_mask, reverse) do |tag|
200
+ return true if tt? tag
201
+ end
202
+ false
203
+ end
204
+
197
205
  ##
198
206
  # Turns on tags for +item+ on +res+
199
207
 
200
208
  def on_tags res, item
201
- attr_mask = item.turn_on
202
- return if attr_mask.zero?
203
-
204
- @attr_tags.each do |tag|
205
- if attr_mask & tag.bit != 0 then
206
- res << annotate(tag.on)
207
- @in_tt += 1 if tt? tag
208
- end
209
+ each_attr_tag(item.turn_on) do |tag|
210
+ res << annotate(tag.on)
211
+ @in_tt += 1 if tt? tag
209
212
  end
210
213
  end
211
214
 
@@ -213,13 +216,18 @@ class RDoc::Markup::Formatter
213
216
  # Turns off tags for +item+ on +res+
214
217
 
215
218
  def off_tags res, item
216
- attr_mask = item.turn_off
219
+ each_attr_tag(item.turn_off, true) do |tag|
220
+ @in_tt -= 1 if tt? tag
221
+ res << annotate(tag.off)
222
+ end
223
+ end
224
+
225
+ def each_attr_tag attr_mask, reverse = false
217
226
  return if attr_mask.zero?
218
227
 
219
- @attr_tags.reverse_each do |tag|
228
+ @attr_tags.public_send(reverse ? :reverse_each : :each) do |tag|
220
229
  if attr_mask & tag.bit != 0 then
221
- @in_tt -= 1 if tt? tag
222
- res << annotate(tag.off)
230
+ yield tag
223
231
  end
224
232
  end
225
233
  end
@@ -262,4 +270,3 @@ class RDoc::Markup::Formatter
262
270
  end
263
271
 
264
272
  end
265
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A hard-break in the middle of a paragraph.
4
4
 
@@ -29,4 +29,3 @@ class RDoc::Markup::HardBreak
29
29
  end
30
30
 
31
31
  end
32
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A heading with a level (1-6) and text
4
4
 
@@ -23,12 +23,12 @@ RDoc::Markup::Heading =
23
23
  return @to_html if @to_html
24
24
 
25
25
  markup = RDoc::Markup.new
26
- markup.add_special RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
26
+ markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
27
27
 
28
28
  @to_html = RDoc::Markup::ToHtml.new nil
29
29
 
30
- def @to_html.handle_special_CROSSREF special
31
- special.text.sub(/^\\/, '')
30
+ def @to_html.handle_regexp_CROSSREF target
31
+ target.text.sub(/^\\/, '')
32
32
  end
33
33
 
34
34
  @to_html
@@ -66,7 +66,13 @@ RDoc::Markup::Heading =
66
66
  # element.
67
67
 
68
68
  def plain_html
69
- self.class.to_html.to_html(text.dup)
69
+ text = self.text.dup
70
+
71
+ if matched = text.match(/rdoc-image:[^:]+:(.*)/)
72
+ text = matched[1]
73
+ end
74
+
75
+ self.class.to_html.to_html(text)
70
76
  end
71
77
 
72
78
  def pretty_print q # :nodoc:
@@ -76,4 +82,3 @@ RDoc::Markup::Heading =
76
82
  end
77
83
 
78
84
  end
79
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A file included at generation time. Objects of this class are created by
4
4
  # RDoc::RD for an extension-less include.
@@ -40,4 +40,3 @@ class RDoc::Markup::Include
40
40
  end
41
41
 
42
42
  end
43
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # An Indented Paragraph of text
4
4
 
@@ -45,4 +45,3 @@ class RDoc::Markup::IndentedParagraph < RDoc::Markup::Raw
45
45
  end
46
46
 
47
47
  end
48
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # A List is a homogeneous set of ListItems.
4
4
  #
@@ -99,4 +99,3 @@ class RDoc::Markup::List
99
99
  end
100
100
 
101
101
  end
102
-
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # An item within a List that contains paragraphs, headings, etc.
4
4
  #
@@ -97,4 +97,3 @@ class RDoc::Markup::ListItem
97
97
  end
98
98
 
99
99
  end
100
-