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
@@ -1,409 +0,0 @@
1
- # frozen_string_literal: true
2
- ##
3
- # Manages changes of attributes in a block of text
4
-
5
- class RDoc::Markup::AttributeManager
6
-
7
- ##
8
- # The NUL character
9
-
10
- NULL = "\000".freeze
11
-
12
- #--
13
- # We work by substituting non-printing characters in to the text. For now
14
- # I'm assuming that I can substitute a character in the range 0..8 for a 7
15
- # bit character without damaging the encoded string, but this might be
16
- # optimistic
17
- #++
18
-
19
- A_PROTECT = 004 # :nodoc:
20
-
21
- ##
22
- # Special mask character to prevent inline markup handling
23
-
24
- PROTECT_ATTR = A_PROTECT.chr # :nodoc:
25
-
26
- ##
27
- # The attributes enabled for this markup object.
28
-
29
- attr_reader :attributes
30
-
31
- ##
32
- # This maps delimiters that occur around words (such as *bold* or +tt+)
33
- # where the start and end delimiters and the same. This lets us optimize
34
- # the regexp
35
-
36
- attr_reader :matching_word_pairs
37
-
38
- ##
39
- # And this is used when the delimiters aren't the same. In this case the
40
- # hash maps a pattern to the attribute character
41
-
42
- attr_reader :word_pair_map
43
-
44
- ##
45
- # This maps HTML tags to the corresponding attribute char
46
-
47
- attr_reader :html_tags
48
-
49
- ##
50
- # A \ in front of a character that would normally be processed turns off
51
- # processing. We do this by turning \< into <#{PROTECT}
52
-
53
- attr_reader :protectable
54
-
55
- ##
56
- # And this maps _regexp handling_ sequences to a name. A regexp handling
57
- # sequence is something like a WikiWord
58
-
59
- attr_reader :regexp_handlings
60
-
61
- ##
62
- # A bits of exclusive maps
63
- attr_reader :exclusive_bitmap
64
-
65
- ##
66
- # Creates a new attribute manager that understands bold, emphasized and
67
- # teletype text.
68
-
69
- def initialize
70
- @html_tags = {}
71
- @matching_word_pairs = {}
72
- @protectable = %w[<]
73
- @regexp_handlings = []
74
- @word_pair_map = {}
75
- @exclusive_bitmap = 0
76
- @attributes = RDoc::Markup::Attributes.new
77
-
78
- add_word_pair "*", "*", :BOLD, true
79
- add_word_pair "_", "_", :EM, true
80
- add_word_pair "+", "+", :TT, true
81
-
82
- add_html "em", :EM, true
83
- add_html "i", :EM, true
84
- add_html "b", :BOLD, true
85
- add_html "tt", :TT, true
86
- add_html "code", :TT, true
87
- end
88
-
89
- ##
90
- # Return an attribute object with the given turn_on and turn_off bits set
91
-
92
- def attribute(turn_on, turn_off)
93
- RDoc::Markup::AttrChanger.new turn_on, turn_off
94
- end
95
-
96
- ##
97
- # Changes the current attribute from +current+ to +new+
98
-
99
- def change_attribute current, new
100
- diff = current ^ new
101
- attribute(new & diff, current & diff)
102
- end
103
-
104
- ##
105
- # Used by the tests to change attributes by name from +current_set+ to
106
- # +new_set+
107
-
108
- def changed_attribute_by_name current_set, new_set
109
- current = new = 0
110
- current_set.each do |name|
111
- current |= @attributes.bitmap_for(name)
112
- end
113
-
114
- new_set.each do |name|
115
- new |= @attributes.bitmap_for(name)
116
- end
117
-
118
- change_attribute(current, new)
119
- end
120
-
121
- ##
122
- # Copies +start_pos+ to +end_pos+ from the current string
123
-
124
- def copy_string(start_pos, end_pos)
125
- res = @str[start_pos...end_pos]
126
- res.gsub!(/\000/, '')
127
- res
128
- end
129
-
130
- def exclusive?(attr)
131
- (attr & @exclusive_bitmap) != 0
132
- end
133
-
134
- NON_PRINTING_START = "\1" # :nodoc:
135
- NON_PRINTING_END = "\2" # :nodoc:
136
-
137
- ##
138
- # Map attributes like <b>text</b>to the sequence
139
- # \001\002<char>\001\003<char>, where <char> is a per-attribute specific
140
- # character
141
-
142
- def convert_attrs(str, attrs, exclusive = false)
143
- convert_attrs_matching_word_pairs(str, attrs, exclusive)
144
- convert_attrs_word_pair_map(str, attrs, exclusive)
145
- end
146
-
147
- def convert_attrs_matching_word_pairs(str, attrs, exclusive)
148
- # first do matching ones
149
- tags = @matching_word_pairs.select { |start, bitmap|
150
- if exclusive && exclusive?(bitmap)
151
- true
152
- elsif !exclusive && !exclusive?(bitmap)
153
- true
154
- else
155
- false
156
- end
157
- }.keys
158
- return if tags.empty?
159
- all_tags = @matching_word_pairs.keys
160
-
161
- re = /(^|\W|[#{all_tags.join("")}])([#{tags.join("")}])(\2*[#\\]?[\w:.\/\[\]-]+?\S?)\2(?!\2)([#{all_tags.join("")}]|\W|$)/
162
-
163
- 1 while str.gsub!(re) { |orig|
164
- attr = @matching_word_pairs[$2]
165
- attr_updated = attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr)
166
- if attr_updated
167
- $1 + NULL * $2.length + $3 + NULL * $2.length + $4
168
- else
169
- $1 + NON_PRINTING_START + $2 + NON_PRINTING_END + $3 + NON_PRINTING_START + $2 + NON_PRINTING_END + $4
170
- end
171
- }
172
- str.delete!(NON_PRINTING_START + NON_PRINTING_END)
173
- end
174
-
175
- def convert_attrs_word_pair_map(str, attrs, exclusive)
176
- # then non-matching
177
- unless @word_pair_map.empty? then
178
- @word_pair_map.each do |regexp, attr|
179
- if !exclusive
180
- next if exclusive?(attr)
181
- else
182
- next if !exclusive?(attr)
183
- end
184
- 1 while str.gsub!(regexp) { |orig|
185
- updated = attrs.set_attrs($`.length + $1.length, $2.length, attr)
186
- if updated
187
- NULL * $1.length + $2 + NULL * $3.length
188
- else
189
- orig
190
- end
191
- }
192
- end
193
- end
194
- end
195
-
196
- ##
197
- # Converts HTML tags to RDoc attributes
198
-
199
- def convert_html(str, attrs, exclusive = false)
200
- tags = @html_tags.select { |start, bitmap|
201
- if exclusive && exclusive?(bitmap)
202
- true
203
- elsif !exclusive && !exclusive?(bitmap)
204
- true
205
- else
206
- false
207
- end
208
- }.keys.join '|'
209
-
210
- 1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) { |orig|
211
- attr = @html_tags[$1.downcase]
212
- html_length = $1.length + 2
213
- seq = NULL * html_length
214
- attrs.set_attrs($`.length + html_length, $2.length, attr)
215
- seq + $2 + seq + NULL
216
- }
217
- end
218
-
219
- ##
220
- # Converts regexp handling sequences to RDoc attributes
221
-
222
- def convert_regexp_handlings str, attrs, exclusive = false
223
- @regexp_handlings.each do |regexp, attribute|
224
- if exclusive
225
- next if !exclusive?(attribute)
226
- else
227
- next if exclusive?(attribute)
228
- end
229
- str.scan(regexp) do
230
- capture = $~.size == 1 ? 0 : 1
231
-
232
- s, e = $~.offset capture
233
-
234
- attrs.set_attrs s, e - s, attribute | @attributes.regexp_handling
235
- end
236
- end
237
- end
238
-
239
- ##
240
- # Escapes regexp handling sequences of text to prevent conversion to RDoc
241
-
242
- def mask_protected_sequences
243
- # protect __send__, __FILE__, etc.
244
- @str.gsub!(/__([a-z]+)__/i,
245
- "_#{PROTECT_ATTR}_#{PROTECT_ATTR}\\1_#{PROTECT_ATTR}_#{PROTECT_ATTR}")
246
- @str.gsub!(/(\A|[^\\])\\([#{Regexp.escape @protectable.join}])/m,
247
- "\\1\\2#{PROTECT_ATTR}")
248
- @str.gsub!(/\\(\\[#{Regexp.escape @protectable.join}])/m, "\\1")
249
- end
250
-
251
- ##
252
- # Unescapes regexp handling sequences of text
253
-
254
- def unmask_protected_sequences
255
- @str.gsub!(/(.)#{PROTECT_ATTR}/, "\\1\000")
256
- end
257
-
258
- ##
259
- # Adds a markup class with +name+ for words wrapped in the +start+ and
260
- # +stop+ character. To make words wrapped with "*" bold:
261
- #
262
- # am.add_word_pair '*', '*', :BOLD
263
-
264
- def add_word_pair(start, stop, name, exclusive = false)
265
- raise ArgumentError, "Word flags may not start with '<'" if
266
- start[0,1] == '<'
267
-
268
- bitmap = @attributes.bitmap_for name
269
-
270
- if start == stop then
271
- @matching_word_pairs[start] = bitmap
272
- else
273
- pattern = /(#{Regexp.escape start})(\S+)(#{Regexp.escape stop})/
274
- @word_pair_map[pattern] = bitmap
275
- end
276
-
277
- @protectable << start[0,1]
278
- @protectable.uniq!
279
-
280
- @exclusive_bitmap |= bitmap if exclusive
281
- end
282
-
283
- ##
284
- # Adds a markup class with +name+ for words surrounded by HTML tag +tag+.
285
- # To process emphasis tags:
286
- #
287
- # am.add_html 'em', :EM
288
-
289
- def add_html(tag, name, exclusive = false)
290
- bitmap = @attributes.bitmap_for name
291
- @html_tags[tag.downcase] = bitmap
292
- @exclusive_bitmap |= bitmap if exclusive
293
- end
294
-
295
- ##
296
- # Adds a regexp handling for +pattern+ with +name+. A simple URL handler
297
- # would be:
298
- #
299
- # @am.add_regexp_handling(/((https?:)\S+\w)/, :HYPERLINK)
300
-
301
- def add_regexp_handling pattern, name, exclusive = false
302
- bitmap = @attributes.bitmap_for(name)
303
- @regexp_handlings << [pattern, bitmap]
304
- @exclusive_bitmap |= bitmap if exclusive
305
- end
306
-
307
- ##
308
- # Processes +str+ converting attributes, HTML and regexp handlings
309
-
310
- def flow str
311
- @str = str.dup
312
-
313
- mask_protected_sequences
314
-
315
- @attrs = RDoc::Markup::AttrSpan.new @str.length, @exclusive_bitmap
316
-
317
- convert_attrs @str, @attrs, true
318
- convert_html @str, @attrs, true
319
- convert_regexp_handlings @str, @attrs, true
320
- convert_attrs @str, @attrs
321
- convert_html @str, @attrs
322
- convert_regexp_handlings @str, @attrs
323
-
324
- unmask_protected_sequences
325
-
326
- split_into_flow
327
- end
328
-
329
- ##
330
- # Debug method that prints a string along with its attributes
331
-
332
- def display_attributes
333
- puts
334
- puts @str.tr(NULL, "!")
335
- bit = 1
336
- 16.times do |bno|
337
- line = ""
338
- @str.length.times do |i|
339
- if (@attrs[i] & bit) == 0
340
- line << " "
341
- else
342
- if bno.zero?
343
- line << "S"
344
- else
345
- line << ("%d" % (bno+1))
346
- end
347
- end
348
- end
349
- puts(line) unless line =~ /^ *$/
350
- bit <<= 1
351
- end
352
- end
353
-
354
- ##
355
- # Splits the string into chunks by attribute change
356
-
357
- def split_into_flow
358
- res = []
359
- current_attr = 0
360
-
361
- str_len = @str.length
362
-
363
- # skip leading invisible text
364
- i = 0
365
- i += 1 while i < str_len and @str[i].chr == "\0"
366
- start_pos = i
367
-
368
- # then scan the string, chunking it on attribute changes
369
- while i < str_len
370
- new_attr = @attrs[i]
371
- if new_attr != current_attr
372
- if i > start_pos
373
- res << copy_string(start_pos, i)
374
- start_pos = i
375
- end
376
-
377
- res << change_attribute(current_attr, new_attr)
378
- current_attr = new_attr
379
-
380
- if (current_attr & @attributes.regexp_handling) != 0 then
381
- i += 1 while
382
- i < str_len and (@attrs[i] & @attributes.regexp_handling) != 0
383
-
384
- res << RDoc::Markup::RegexpHandling.new(current_attr,
385
- copy_string(start_pos, i))
386
- start_pos = i
387
- next
388
- end
389
- end
390
-
391
- # move on, skipping any invisible characters
392
- begin
393
- i += 1
394
- end while i < str_len and @str[i].chr == "\0"
395
- end
396
-
397
- # tidy up trailing text
398
- if start_pos < str_len
399
- res << copy_string(start_pos, str_len)
400
- end
401
-
402
- # and reset to all attributes off
403
- res << change_attribute(current_attr, 0) if current_attr != 0
404
-
405
- res
406
- end
407
-
408
- end
409
-
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
- ##
3
- # We manage a set of attributes. Each attribute has a symbol name and a bit
4
- # value.
5
-
6
- class RDoc::Markup::Attributes
7
-
8
- ##
9
- # The regexp handling attribute type. See RDoc::Markup#add_regexp_handling
10
-
11
- attr_reader :regexp_handling
12
-
13
- ##
14
- # Creates a new attributes set.
15
-
16
- def initialize
17
- @regexp_handling = 1
18
-
19
- @name_to_bitmap = [
20
- [:_REGEXP_HANDLING_, @regexp_handling],
21
- ]
22
-
23
- @next_bitmap = @regexp_handling << 1
24
- end
25
-
26
- ##
27
- # Returns a unique bit for +name+
28
-
29
- def bitmap_for name
30
- bitmap = @name_to_bitmap.assoc name
31
-
32
- unless bitmap then
33
- bitmap = @next_bitmap
34
- @next_bitmap <<= 1
35
- @name_to_bitmap << [name, bitmap]
36
- else
37
- bitmap = bitmap.last
38
- end
39
-
40
- bitmap
41
- end
42
-
43
- ##
44
- # Returns a string representation of +bitmap+
45
-
46
- def as_string bitmap
47
- return 'none' if bitmap.zero?
48
- res = []
49
-
50
- @name_to_bitmap.each do |name, bit|
51
- res << name if (bitmap & bit) != 0
52
- end
53
-
54
- res.join ','
55
- end
56
-
57
- ##
58
- # yields each attribute name in +bitmap+
59
-
60
- def each_name_of bitmap
61
- return enum_for __method__, bitmap unless block_given?
62
-
63
- @name_to_bitmap.each do |name, bit|
64
- next if bit == @regexp_handling
65
-
66
- yield name.to_s if (bitmap & bit) != 0
67
- end
68
- end
69
-
70
- end
71
-
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
- ##
3
- # Hold details of a regexp handling sequence
4
-
5
- class RDoc::Markup::RegexpHandling
6
-
7
- ##
8
- # Regexp handling type
9
-
10
- attr_reader :type
11
-
12
- ##
13
- # Regexp handling text
14
-
15
- attr_accessor :text
16
-
17
- ##
18
- # Creates a new regexp handling sequence of +type+ with +text+
19
-
20
- def initialize(type, text)
21
- @type, @text = type, text
22
- end
23
-
24
- ##
25
- # Regexp handlings are equal when the have the same text and type
26
-
27
- def ==(o)
28
- self.text == o.text && self.type == o.type
29
- end
30
-
31
- def inspect # :nodoc:
32
- "#<RDoc::Markup::RegexpHandling:0x%x @type=%p, @text=%p>" % [
33
- object_id, @type, text.dump]
34
- end
35
-
36
- def to_s # :nodoc:
37
- "RegexpHandling: type=#{type} text=#{text.dump}"
38
- end
39
-
40
- end
41
-
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
- ##
3
- # MetaMethod represents a meta-programmed method
4
-
5
- class RDoc::MetaMethod < RDoc::AnyMethod
6
- end
7
-