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
data/lib/rdoc/task.rb CHANGED
@@ -32,7 +32,7 @@ begin
32
32
  rescue Gem::LoadError
33
33
  end unless defined?(Rake)
34
34
 
35
- require 'rdoc'
35
+ require_relative '../rdoc'
36
36
  require 'rake'
37
37
  require 'rake/tasklib'
38
38
 
@@ -50,13 +50,16 @@ require 'rake/tasklib'
50
50
  # [rerdoc]
51
51
  # Rebuild the rdoc files from scratch, even if they are not out of date.
52
52
  #
53
+ # [rdoc:coverage]
54
+ # Print RDoc coverage report for all rdoc files.
55
+ #
53
56
  # Simple Example:
54
57
  #
55
58
  # require 'rdoc/task'
56
59
  #
57
60
  # RDoc::Task.new do |rdoc|
58
- # rdoc.main = "README.rdoc"
59
- # rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
61
+ # rdoc.main = "README.md"
62
+ # rdoc.rdoc_files.include("README.md", "lib/**/*.rb")
60
63
  # end
61
64
  #
62
65
  # The +rdoc+ object passed to the block is an RDoc::Task object. See the
@@ -71,8 +74,8 @@ require 'rake/tasklib'
71
74
  # require 'rdoc/task'
72
75
  #
73
76
  # RDoc::Task.new :rdoc_dev do |rdoc|
74
- # rdoc.main = "README.doc"
75
- # rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
77
+ # rdoc.main = "README.md"
78
+ # rdoc.rdoc_files.include("README.md", "lib/**/*.rb")
76
79
  # rdoc.options << "--all"
77
80
  # end
78
81
  #
@@ -90,8 +93,8 @@ require 'rake/tasklib'
90
93
  # RDoc::Task.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean",
91
94
  # :rerdoc => "rdoc:force")
92
95
  #
93
- # This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc:clean</tt> and
94
- # <tt>:rdoc:force</tt>.
96
+ # This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc:clean</tt>,
97
+ # <tt>:rdoc:force</tt>, and <tt>:rdoc:coverage</tt>.
95
98
 
96
99
  class RDoc::Task < Rake::TaskLib
97
100
 
@@ -101,9 +104,8 @@ class RDoc::Task < Rake::TaskLib
101
104
  attr_accessor :name
102
105
 
103
106
  ##
104
- # Comment markup format. rdoc, rd and tomdoc are supported. (default is
105
- # 'rdoc')
106
-
107
+ # The markup format; one of: +rdoc+ (the default), +markdown+, +rd+, +tomdoc+.
108
+ # See {Markup Formats}[rdoc-ref:RDoc::Markup@Markup+Formats].
107
109
  attr_accessor :markup
108
110
 
109
111
  ##
@@ -152,7 +154,7 @@ class RDoc::Task < Rake::TaskLib
152
154
  # Create an RDoc task with the given name. See the RDoc::Task class overview
153
155
  # for documentation.
154
156
 
155
- def initialize name = :rdoc # :yield: self
157
+ def initialize(name = :rdoc) # :yield: self
156
158
  defaults
157
159
 
158
160
  check_names name
@@ -168,7 +170,7 @@ class RDoc::Task < Rake::TaskLib
168
170
  # Ensures that +names+ only includes names for the :rdoc, :clobber_rdoc and
169
171
  # :rerdoc. If other names are given an ArgumentError is raised.
170
172
 
171
- def check_names names
173
+ def check_names(names)
172
174
  return unless Hash === names
173
175
 
174
176
  invalid_options =
@@ -200,21 +202,6 @@ class RDoc::Task < Rake::TaskLib
200
202
  @options = []
201
203
  end
202
204
 
203
- ##
204
- # All source is inline now. This method is deprecated
205
-
206
- def inline_source # :nodoc:
207
- warn "RDoc::Task#inline_source is deprecated"
208
- true
209
- end
210
-
211
- ##
212
- # All source is inline now. This method is deprecated
213
-
214
- def inline_source=(value) # :nodoc:
215
- warn "RDoc::Task#inline_source is deprecated"
216
- end
217
-
218
205
  ##
219
206
  # Create the tasks defined by this task lib.
220
207
 
@@ -248,6 +235,27 @@ class RDoc::Task < Rake::TaskLib
248
235
  RDoc::RDoc.new.document args
249
236
  end
250
237
 
238
+ namespace rdoc_task_name do
239
+ desc coverage_task_description
240
+ task coverage_task_name do
241
+ @before_running_rdoc.call if @before_running_rdoc
242
+ opts = option_list << "-C"
243
+ args = opts + @rdoc_files
244
+
245
+ $stderr.puts "rdoc #{args.join ' '}" if Rake.application.options.trace
246
+ RDoc::RDoc.new.document args
247
+ end
248
+
249
+ desc server_task_description
250
+ task "server" do
251
+ @before_running_rdoc.call if @before_running_rdoc
252
+ args = option_list + ["--server"] + @rdoc_files
253
+
254
+ $stderr.puts "rdoc #{args.join ' '}" if Rake.application.options.trace
255
+ RDoc::RDoc.new.document args
256
+ end
257
+ end
258
+
251
259
  self
252
260
  end
253
261
 
@@ -288,6 +296,20 @@ class RDoc::Task < Rake::TaskLib
288
296
  "Rebuild RDoc HTML files"
289
297
  end
290
298
 
299
+ ##
300
+ # Task description for the coverage task or its renamed description
301
+
302
+ def coverage_task_description
303
+ "Print RDoc coverage report"
304
+ end
305
+
306
+ ##
307
+ # Task description for the server task
308
+
309
+ def server_task_description
310
+ "Start a live-reloading documentation server"
311
+ end
312
+
291
313
  private
292
314
 
293
315
  def rdoc_target
@@ -315,6 +337,10 @@ class RDoc::Task < Rake::TaskLib
315
337
  end
316
338
  end
317
339
 
340
+ def coverage_task_name
341
+ "coverage"
342
+ end
343
+
318
344
  end
319
345
 
320
346
  # :stopdoc:
@@ -323,7 +349,7 @@ module Rake
323
349
  ##
324
350
  # For backwards compatibility
325
351
 
326
- RDocTask = RDoc::Task
352
+ RDocTask = RDoc::Task # :nodoc:
327
353
 
328
354
  end
329
355
  # :startdoc:
data/lib/rdoc/text.rb CHANGED
@@ -10,6 +10,10 @@ require 'strscan'
10
10
 
11
11
  module RDoc::Text
12
12
 
13
+ ##
14
+ # The language for this text. This affects stripping comments
15
+ # markers.
16
+
13
17
  attr_accessor :language
14
18
 
15
19
  ##
@@ -25,38 +29,10 @@ module RDoc::Text
25
29
 
26
30
  MARKUP_FORMAT.default = RDoc::Markup
27
31
 
28
- ##
29
- # Maps an encoding to a Hash of characters properly transcoded for that
30
- # encoding.
31
- #
32
- # See also encode_fallback.
33
-
34
- TO_HTML_CHARACTERS = Hash.new do |h, encoding|
35
- h[encoding] = {
36
- :close_dquote => encode_fallback('”', encoding, '"'),
37
- :close_squote => encode_fallback('’', encoding, '\''),
38
- :copyright => encode_fallback('©', encoding, '(c)'),
39
- :ellipsis => encode_fallback('…', encoding, '...'),
40
- :em_dash => encode_fallback('—', encoding, '---'),
41
- :en_dash => encode_fallback('–', encoding, '--'),
42
- :open_dquote => encode_fallback('“', encoding, '"'),
43
- :open_squote => encode_fallback('‘', encoding, '\''),
44
- :trademark => encode_fallback('®', encoding, '(r)'),
45
- }
46
- end
47
-
48
- ##
49
- # Transcodes +character+ to +encoding+ with a +fallback+ character.
50
-
51
- def self.encode_fallback character, encoding, fallback
52
- character.encode(encoding, :fallback => { character => fallback },
53
- :undef => :replace, :replace => fallback)
54
- end
55
-
56
32
  ##
57
33
  # Expands tab characters in +text+ to eight spaces
58
34
 
59
- def expand_tabs text
35
+ module_function def expand_tabs(text)
60
36
  expanded = []
61
37
 
62
38
  text.each_line do |line|
@@ -75,7 +51,7 @@ module RDoc::Text
75
51
  ##
76
52
  # Flush +text+ left based on the shortest line
77
53
 
78
- def flush_left text
54
+ def flush_left(text)
79
55
  indent = 9999
80
56
 
81
57
  text.each_line do |line|
@@ -94,9 +70,9 @@ module RDoc::Text
94
70
  #
95
71
  # Requires the including class to implement #formatter
96
72
 
97
- def markup text
98
- if @store.rdoc.options
99
- locale = @store.rdoc.options.locale
73
+ def markup(text)
74
+ if @store.options
75
+ locale = @store.options.locale
100
76
  else
101
77
  locale = nil
102
78
  end
@@ -110,7 +86,7 @@ module RDoc::Text
110
86
  ##
111
87
  # Strips hashes, expands tabs then flushes +text+ to the left
112
88
 
113
- def normalize_comment text
89
+ def normalize_comment(text)
114
90
  return text if text.empty?
115
91
 
116
92
  case language
@@ -128,7 +104,7 @@ module RDoc::Text
128
104
  ##
129
105
  # Normalizes +text+ then builds a RDoc::Markup::Document from it
130
106
 
131
- def parse text, format = 'rdoc'
107
+ def parse(text, format = 'rdoc')
132
108
  return text if RDoc::Markup::Document === text
133
109
  return text.parse if RDoc::Comment === text
134
110
 
@@ -142,16 +118,16 @@ module RDoc::Text
142
118
  ##
143
119
  # The first +limit+ characters of +text+ as HTML
144
120
 
145
- def snippet text, limit = 100
121
+ def snippet(text, limit = 100)
146
122
  document = parse text
147
123
 
148
- RDoc::Markup::ToHtmlSnippet.new(options, limit).convert document
124
+ RDoc::Markup::ToHtmlSnippet.new(limit).convert document
149
125
  end
150
126
 
151
127
  ##
152
128
  # Strips leading # characters from +text+
153
129
 
154
- def strip_hashes text
130
+ def strip_hashes(text)
155
131
  return text if text =~ /^(?>\s*)[^\#]/
156
132
 
157
133
  empty = ''
@@ -163,14 +139,14 @@ module RDoc::Text
163
139
  ##
164
140
  # Strips leading and trailing \n characters from +text+
165
141
 
166
- def strip_newlines text
142
+ def strip_newlines(text)
167
143
  text.gsub(/\A\n*(.*?)\n*\z/m) do $1 end # block preserves String encoding
168
144
  end
169
145
 
170
146
  ##
171
147
  # Strips /* */ style comments
172
148
 
173
- def strip_stars text
149
+ def strip_stars(text)
174
150
  return text unless text =~ %r%/\*.*\*/%m
175
151
 
176
152
  encoding = text.encoding
@@ -189,86 +165,6 @@ module RDoc::Text
189
165
  text.gsub(/^\s+$/, empty)
190
166
  end
191
167
 
192
- ##
193
- # Converts ampersand, dashes, ellipsis, quotes, copyright and registered
194
- # trademark symbols in +text+ to properly encoded characters.
195
-
196
- def to_html text
197
- html = (''.encode text.encoding).dup
198
-
199
- encoded = RDoc::Text::TO_HTML_CHARACTERS[text.encoding]
200
-
201
- s = StringScanner.new text
202
- insquotes = false
203
- indquotes = false
204
- after_word = nil
205
-
206
- until s.eos? do
207
- case
208
- when s.scan(/<(tt|code)>.*?<\/\1>/) then # skip contents of tt
209
- html << s.matched.gsub('\\\\', '\\')
210
- when s.scan(/<(tt|code)>.*?/) then
211
- warn "mismatched <#{s[1]}> tag" # TODO signal file/line
212
- html << s.matched
213
- when s.scan(/<[^>]+\/?s*>/) then # skip HTML tags
214
- html << s.matched
215
- when s.scan(/\\(\S)/) then # unhandled suppressed crossref
216
- html << s[1]
217
- after_word = nil
218
- when s.scan(/\.\.\.(\.?)/) then
219
- html << s[1] << encoded[:ellipsis]
220
- after_word = nil
221
- when s.scan(/\(c\)/) then
222
- html << encoded[:copyright]
223
- after_word = nil
224
- when s.scan(/\(r\)/) then
225
- html << encoded[:trademark]
226
- after_word = nil
227
- when s.scan(/---/) then
228
- html << encoded[:em_dash]
229
- after_word = nil
230
- when s.scan(/--/) then
231
- html << encoded[:en_dash]
232
- after_word = nil
233
- when s.scan(/&quot;|"/) then
234
- html << encoded[indquotes ? :close_dquote : :open_dquote]
235
- indquotes = !indquotes
236
- after_word = nil
237
- when s.scan(/``/) then # backtick double quote
238
- html << encoded[:open_dquote]
239
- after_word = nil
240
- when s.scan(/''/) then # tick double quote
241
- html << encoded[:close_dquote]
242
- after_word = nil
243
- when s.scan(/'/) then # single quote
244
- if insquotes
245
- html << encoded[:close_squote]
246
- insquotes = false
247
- elsif after_word
248
- # Mary's dog, my parents' house: do not start paired quotes
249
- html << encoded[:close_squote]
250
- else
251
- html << encoded[:open_squote]
252
- insquotes = true
253
- end
254
-
255
- after_word = nil
256
- else # advance to the next potentially significant character
257
- match = s.scan(/.+?(?=[<\\.("'`&-])/) #"
258
-
259
- if match then
260
- html << match
261
- after_word = match =~ /\w$/
262
- else
263
- html << s.rest
264
- break
265
- end
266
- end
267
- end
268
-
269
- html
270
- end
271
-
272
168
  ##
273
169
  # Wraps +txt+ to +line_len+
274
170
 
@@ -301,4 +197,48 @@ module RDoc::Text
301
197
  res.join.strip
302
198
  end
303
199
 
200
+ ##
201
+ # Character class to be separated by a space when concatenating
202
+ # lines.
203
+
204
+ SPACE_SEPARATED_LETTER_CLASS = /[\p{Nd}\p{Lc}\p{Pc}]|[!-~&&\W]/
205
+
206
+ ##
207
+ # Converts +text+ to a GitHub-style anchor ID:
208
+ # - Lowercase
209
+ # - Remove characters that aren't alphanumeric, space, or hyphen
210
+ # - Replace spaces with hyphens
211
+ #
212
+ # Examples:
213
+ # "Hello World" -> "hello-world"
214
+ # "Foo::Bar" -> "foobar"
215
+ # "What's New?" -> "whats-new"
216
+
217
+ module_function def to_anchor(text)
218
+ text.downcase.gsub(/[^a-z0-9 \-]/, '').gsub(' ', '-')
219
+ end
220
+
221
+ ##
222
+ # Decodes a label that may be in legacy RDoc format where CGI.escape was
223
+ # applied and then '%' was replaced with '-'. Converts '+' to space,
224
+ # then reverses -XX hex encoding for non-alphanumeric characters.
225
+ #
226
+ # Labels in new format pass through unchanged because -XX patterns that
227
+ # decode to alphanumeric characters are left as-is (CGI.escape never
228
+ # encodes alphanumerics).
229
+ #
230
+ # Examples:
231
+ # "What-27s+Here" -> "What's Here" (legacy: -27 is apostrophe)
232
+ # "Foo-3A-3ABar" -> "Foo::Bar" (legacy: -3A is colon)
233
+ # "Whats-Here" -> "Whats-Here" (new format, unchanged)
234
+
235
+ module_function def decode_legacy_label(label)
236
+ label = label.tr('+', ' ')
237
+ label.gsub!(/-([0-7][0-9A-F])/) do
238
+ char = [$1.hex].pack('C')
239
+ char.match?(/[a-zA-Z0-9]/) ? $& : char
240
+ end
241
+ label
242
+ end
243
+
304
244
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  ##
3
4
  # A TokenStream is a list of tokens, gathered during the parse of some entity
4
5
  # (say a method). Entities populate these streams by being registered with the
@@ -13,58 +14,32 @@ module RDoc::TokenStream
13
14
  # <tt><span></tt> elements. Some tokens types are wrapped in spans
14
15
  # with the given class names. Other token types are not wrapped in spans.
15
16
 
16
- def self.to_html token_stream
17
- starting_title = false
18
-
17
+ def self.to_html(token_stream)
19
18
  token_stream.map do |t|
20
19
  next unless t
21
20
 
22
21
  style = case t[:kind]
23
- when :on_const then 'ruby-constant'
24
- when :on_kw then 'ruby-keyword'
25
- when :on_ivar then 'ruby-ivar'
26
- when :on_cvar then 'ruby-identifier'
27
- when :on_gvar then 'ruby-identifier'
28
- when '=' != t[:text] && :on_op
29
- then 'ruby-operator'
30
- when :on_tlambda then 'ruby-operator'
31
- when :on_ident then 'ruby-identifier'
32
- when :on_label then 'ruby-value'
33
- when :on_backref, :on_dstring
34
- then 'ruby-node'
35
- when :on_comment then 'ruby-comment'
36
- when :on_embdoc then 'ruby-comment'
37
- when :on_regexp then 'ruby-regexp'
38
- when :on_tstring then 'ruby-string'
39
- when :on_int, :on_float,
40
- :on_rational, :on_imaginary,
41
- :on_heredoc,
42
- :on_symbol, :on_CHAR then 'ruby-value'
43
- when :on_heredoc_beg, :on_heredoc_end
44
- then 'ruby-identifier'
22
+ when :operator then 'ruby-operator'
23
+ when :keyword then 'ruby-keyword'
24
+ when :constant then 'ruby-constant'
25
+ when :ivar then 'ruby-ivar'
26
+ when :comment then 'ruby-comment'
27
+ when :value then 'ruby-value'
28
+ when :string then 'ruby-string'
29
+ when :symbol then 'ruby-value'
30
+ when :x_string then 'ruby-string'
31
+ when :regexp then 'ruby-regexp'
32
+ when :identifier then 'ruby-identifier'
45
33
  end
46
34
 
47
- comment_with_nl = false
48
- if :on_comment == t[:kind] or :on_embdoc == t[:kind] or :on_heredoc_end == t[:kind]
49
- comment_with_nl = true if "\n" == t[:text][-1]
50
- text = t[:text].rstrip
51
- else
52
- text = t[:text]
53
- end
54
-
55
- if :on_ident == t[:kind] && starting_title
56
- starting_title = false
57
- style = 'ruby-identifier ruby-title'
58
- end
59
-
60
- if :on_kw == t[:kind] and 'def' == t[:text]
61
- starting_title = true
62
- end
35
+ text = t[:text]
63
36
 
64
37
  text = CGI.escapeHTML text
65
38
 
66
39
  if style then
67
- "<span class=\"#{style}\">#{text}</span>#{"\n" if comment_with_nl}"
40
+ end_with_newline = text.end_with?("\n")
41
+ text = text.chomp if end_with_newline
42
+ "<span class=\"#{style}\">#{text}</span>#{"\n" if end_with_newline}"
68
43
  else
69
44
  text
70
45
  end
@@ -87,9 +62,11 @@ module RDoc::TokenStream
87
62
 
88
63
  ##
89
64
  # Starts collecting tokens
65
+ #
90
66
 
91
- def collect_tokens
67
+ def collect_tokens(language)
92
68
  @token_stream = []
69
+ @token_stream_language = language
93
70
  end
94
71
 
95
72
  alias start_collecting_tokens collect_tokens
@@ -112,8 +89,16 @@ module RDoc::TokenStream
112
89
  # Returns a string representation of the token stream
113
90
 
114
91
  def tokens_to_s
115
- token_stream.compact.map { |token| token[:text] }.join ''
92
+ (token_stream or return '').compact.map { |token| token[:text] }.join ''
116
93
  end
117
94
 
118
- end
95
+ ##
96
+ # Returns the source language of the token stream as a string
97
+ #
98
+ # Returns 'c' or 'ruby'
119
99
 
100
+ def source_language
101
+ @token_stream_language == :c ? 'c' : 'ruby'
102
+ end
103
+
104
+ end
data/lib/rdoc/tom_doc.rb CHANGED
@@ -3,13 +3,7 @@
3
3
 
4
4
  # A parser for TomDoc based on TomDoc 1.0.0-rc1 (02adef9b5a)
5
5
  #
6
- # The TomDoc specification can be found at:
7
- #
8
- # http://tomdoc.org
9
- #
10
- # The latest version of the TomDoc specification can be found at:
11
- #
12
- # https://github.com/mojombo/tomdoc/blob/master/tomdoc.md
6
+ # The TomDoc specification can be found at http://tomdoc.org.
13
7
  #
14
8
  # To choose TomDoc as your only default format see RDoc::Options@Saved+Options
15
9
  # for instructions on setting up a <code>.rdoc_options</code> file to store
@@ -55,7 +49,7 @@ class RDoc::TomDoc < RDoc::Markup::Parser
55
49
  next unless code_object and
56
50
  RDoc::Comment === comment and comment.format == 'tomdoc'
57
51
 
58
- comment.text.gsub!(/(\A\s*# )(Public|Internal|Deprecated):\s+/) do
52
+ comment.text.gsub!(/\A(\s*# |)(Public|Internal|Deprecated):\s+/) do
59
53
  section = code_object.add_section $2
60
54
  code_object.temporary_section = section
61
55
 
@@ -81,7 +75,7 @@ class RDoc::TomDoc < RDoc::Markup::Parser
81
75
  #
82
76
  # Returns an RDoc::Markup::Document representing the TomDoc format.
83
77
 
84
- def self.parse text
78
+ def self.parse(text)
85
79
  parser = new
86
80
 
87
81
  parser.tokenize text
@@ -97,7 +91,7 @@ class RDoc::TomDoc < RDoc::Markup::Parser
97
91
  #
98
92
  # Returns a String containing the signature and nil if not
99
93
 
100
- def self.signature comment
94
+ def self.signature(comment)
101
95
  return unless comment.tomdoc?
102
96
 
103
97
  document = comment.parse
@@ -140,7 +134,7 @@ class RDoc::TomDoc < RDoc::Markup::Parser
140
134
  #
141
135
  # Returns an RDoc::Markup::Heading
142
136
 
143
- def build_heading level
137
+ def build_heading(level)
144
138
  heading = super
145
139
 
146
140
  @section = heading.text
@@ -156,7 +150,7 @@ class RDoc::TomDoc < RDoc::Markup::Parser
156
150
  #
157
151
  # Returns an RDoc::Markup::Verbatim
158
152
 
159
- def build_verbatim margin
153
+ def build_verbatim(margin)
160
154
  verbatim = super
161
155
 
162
156
  verbatim.format = :ruby if @section == 'Examples'
@@ -170,7 +164,7 @@ class RDoc::TomDoc < RDoc::Markup::Parser
170
164
  #
171
165
  # Returns an RDoc::Markup::Paragraph.
172
166
 
173
- def build_paragraph margin
167
+ def build_paragraph(margin)
174
168
  p :paragraph_start => margin if @debug
175
169
 
176
170
  paragraph = RDoc::Markup::Paragraph.new
@@ -210,7 +204,7 @@ class RDoc::TomDoc < RDoc::Markup::Parser
210
204
  ##
211
205
  # Detects a section change to "Returns" and adds a heading
212
206
 
213
- def parse_text parent, indent # :nodoc:
207
+ def parse_text(parent, indent) # :nodoc:
214
208
  paragraph = build_paragraph indent
215
209
 
216
210
  if false == @seen_returns and 'Returns' == @section then
@@ -228,7 +222,7 @@ class RDoc::TomDoc < RDoc::Markup::Parser
228
222
  #
229
223
  # Returns self.
230
224
 
231
- def tokenize text
225
+ def tokenize(text)
232
226
  text = text.sub(/\A(Public|Internal|Deprecated):\s+/, '')
233
227
 
234
228
  setup_scanner text
data/lib/rdoc/version.rb CHANGED
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RDoc
2
4
 
3
5
  ##
4
6
  # RDoc version you are using
5
7
 
6
- VERSION = '6.3.4.1'
8
+ VERSION = '8.0.0'
7
9
 
8
10
  end