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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +195 -0
- data/History.rdoc +65 -63
- data/LEGAL.rdoc +7 -1
- data/LICENSE.rdoc +6 -0
- data/README.md +236 -0
- data/RI.md +842 -0
- data/TODO.rdoc +8 -7
- data/doc/markup_reference/markdown.md +659 -0
- data/doc/markup_reference/rdoc.rdoc +1169 -0
- data/exe/rdoc +0 -1
- data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -18
- data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +50 -24
- data/lib/rdoc/{attr.rb → code_object/attr.rb} +16 -14
- data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +225 -58
- data/lib/rdoc/{constant.rb → code_object/constant.rb} +44 -10
- data/lib/rdoc/code_object/context/section.rb +182 -0
- data/lib/rdoc/{context.rb → code_object/context.rb} +78 -106
- data/lib/rdoc/{extend.rb → code_object/extend.rb} +0 -1
- data/lib/rdoc/{include.rb → code_object/include.rb} +0 -1
- data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +46 -48
- data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +6 -4
- data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +2 -3
- data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
- data/lib/rdoc/{require.rb → code_object/require.rb} +1 -2
- data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +5 -1
- data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +60 -63
- data/lib/rdoc/code_object.rb +11 -39
- data/lib/rdoc/code_objects.rb +1 -2
- data/lib/rdoc/comment.rb +202 -99
- data/lib/rdoc/cross_reference.rb +75 -62
- data/lib/rdoc/encoding.rb +8 -24
- data/lib/rdoc/erb_partial.rb +1 -2
- data/lib/rdoc/erbio.rb +3 -8
- data/lib/rdoc/generator/aliki.rb +200 -0
- data/lib/rdoc/generator/darkfish.rb +156 -122
- data/lib/rdoc/generator/json_index.rb +8 -24
- data/lib/rdoc/generator/markup.rb +70 -34
- data/lib/rdoc/generator/pot/message_extractor.rb +7 -7
- data/lib/rdoc/generator/pot/po.rb +1 -1
- data/lib/rdoc/generator/pot/po_entry.rb +8 -8
- data/lib/rdoc/generator/pot.rb +1 -5
- data/lib/rdoc/generator/ri.rb +1 -2
- data/lib/rdoc/generator/template/aliki/DESIGN.md +536 -0
- data/lib/rdoc/generator/template/aliki/_aside_toc.rhtml +8 -0
- data/lib/rdoc/generator/template/aliki/_footer.rhtml +23 -0
- data/lib/rdoc/generator/template/aliki/_head.rhtml +163 -0
- data/lib/rdoc/generator/template/aliki/_header.rhtml +56 -0
- data/lib/rdoc/generator/template/aliki/_icons.rhtml +208 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_ancestors.rhtml +16 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_classes.rhtml +15 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +27 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +27 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_installed.rhtml +16 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_methods.rhtml +41 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +67 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +15 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +21 -0
- data/lib/rdoc/generator/template/aliki/_sidebar_toggle.rhtml +3 -0
- data/lib/rdoc/generator/template/aliki/class.rhtml +230 -0
- data/lib/rdoc/generator/template/aliki/css/rdoc.css +2181 -0
- data/lib/rdoc/generator/template/aliki/index.rhtml +22 -0
- data/lib/rdoc/generator/template/aliki/js/aliki.js +513 -0
- data/lib/rdoc/generator/template/aliki/js/bash_highlighter.js +167 -0
- data/lib/rdoc/generator/template/aliki/js/c_highlighter.js +299 -0
- data/lib/rdoc/generator/template/aliki/js/search_controller.js +129 -0
- data/lib/rdoc/generator/template/aliki/js/search_navigation.js +105 -0
- data/lib/rdoc/generator/template/aliki/js/search_ranker.js +239 -0
- data/lib/rdoc/generator/template/aliki/js/theme-toggle.js +112 -0
- data/lib/rdoc/generator/template/aliki/page.rhtml +18 -0
- data/lib/rdoc/generator/template/aliki/servlet_not_found.rhtml +14 -0
- data/lib/rdoc/generator/template/aliki/servlet_root.rhtml +65 -0
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +3 -3
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -14
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +11 -9
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +11 -9
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +7 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +20 -11
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +25 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
- data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +2 -1
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +28 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
- data/lib/rdoc/generator/template/darkfish/class.rhtml +138 -90
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +420 -358
- data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/index.rhtml +14 -12
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +59 -3
- data/lib/rdoc/generator/template/darkfish/js/search.js +15 -5
- data/lib/rdoc/generator/template/darkfish/page.rhtml +7 -6
- data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +12 -9
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +24 -21
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +35 -21
- data/lib/rdoc/generator/template/json_index/js/navigation.js +8 -8
- data/lib/rdoc/generator/template/json_index/js/searcher.js +48 -6
- data/lib/rdoc/generator.rb +6 -5
- data/lib/rdoc/i18n/text.rb +3 -3
- data/lib/rdoc/i18n.rb +1 -1
- data/lib/rdoc/known_classes.rb +5 -4
- data/lib/rdoc/markdown/entities.rb +0 -1
- data/lib/rdoc/markdown/literals.kpeg +0 -2
- data/lib/rdoc/markdown/literals.rb +0 -1
- data/lib/rdoc/markdown.kpeg +140 -62
- data/lib/rdoc/markdown.rb +1015 -873
- data/lib/rdoc/markup/blank_line.rb +25 -24
- data/lib/rdoc/markup/block_quote.rb +1 -2
- data/lib/rdoc/markup/document.rb +10 -11
- data/lib/rdoc/markup/element.rb +21 -0
- data/lib/rdoc/markup/formatter.rb +134 -115
- data/lib/rdoc/markup/hard_break.rb +30 -28
- data/lib/rdoc/markup/heading.rb +163 -72
- data/lib/rdoc/markup/include.rb +3 -4
- data/lib/rdoc/markup/indented_paragraph.rb +4 -5
- data/lib/rdoc/markup/inline_parser.rb +312 -0
- data/lib/rdoc/markup/list.rb +6 -7
- data/lib/rdoc/markup/list_item.rb +6 -7
- data/lib/rdoc/markup/paragraph.rb +2 -3
- data/lib/rdoc/markup/parser.rb +29 -19
- data/lib/rdoc/markup/pre_process.rb +39 -18
- data/lib/rdoc/markup/raw.rb +52 -56
- data/lib/rdoc/markup/rule.rb +2 -3
- data/lib/rdoc/markup/table.rb +49 -32
- data/lib/rdoc/markup/to_ansi.rb +58 -8
- data/lib/rdoc/markup/to_bs.rb +47 -38
- data/lib/rdoc/markup/to_html.rb +343 -105
- data/lib/rdoc/markup/to_html_crossref.rb +143 -58
- data/lib/rdoc/markup/to_html_snippet.rb +78 -76
- data/lib/rdoc/markup/to_joined_paragraph.rb +3 -9
- data/lib/rdoc/markup/to_label.rb +34 -25
- data/lib/rdoc/markup/to_markdown.rb +74 -51
- data/lib/rdoc/markup/to_rdoc.rb +141 -82
- data/lib/rdoc/markup/to_table_of_contents.rb +4 -5
- data/lib/rdoc/markup/to_test.rb +10 -3
- data/lib/rdoc/markup/to_tt_only.rb +17 -31
- data/lib/rdoc/markup/verbatim.rb +5 -6
- data/lib/rdoc/markup.rb +59 -707
- data/lib/rdoc/options.rb +228 -101
- data/lib/rdoc/parser/c.rb +186 -184
- data/lib/rdoc/parser/changelog.rb +57 -13
- data/lib/rdoc/parser/markdown.rb +0 -2
- data/lib/rdoc/parser/rbs.rb +275 -0
- data/lib/rdoc/parser/rd.rb +0 -1
- data/lib/rdoc/parser/ruby.rb +963 -2024
- data/lib/rdoc/parser/ruby_colorizer.rb +253 -0
- data/lib/rdoc/parser/simple.rb +6 -23
- data/lib/rdoc/parser/text.rb +0 -1
- data/lib/rdoc/parser.rb +35 -14
- data/lib/rdoc/rbs_helper.rb +186 -0
- data/lib/rdoc/rd/block_parser.rb +659 -11
- data/lib/rdoc/rd/block_parser.ry +13 -9
- data/lib/rdoc/rd/inline.rb +4 -5
- data/lib/rdoc/rd/inline_parser.rb +646 -2
- data/lib/rdoc/rd.rb +4 -5
- data/lib/rdoc/rdoc.rb +234 -90
- data/lib/rdoc/ri/driver.rb +172 -172
- data/lib/rdoc/ri/paths.rb +3 -3
- data/lib/rdoc/{servlet.rb → ri/servlet.rb} +28 -27
- data/lib/rdoc/ri/store.rb +0 -1
- data/lib/rdoc/ri/task.rb +3 -3
- data/lib/rdoc/ri.rb +5 -5
- data/lib/rdoc/rubygems_hook.rb +106 -25
- data/lib/rdoc/server.rb +460 -0
- data/lib/rdoc/stats/normal.rb +1 -1
- data/lib/rdoc/stats/quiet.rb +1 -2
- data/lib/rdoc/stats/verbose.rb +3 -5
- data/lib/rdoc/stats.rb +158 -136
- data/lib/rdoc/store.rb +267 -48
- data/lib/rdoc/task.rb +54 -28
- data/lib/rdoc/text.rb +60 -120
- data/lib/rdoc/token_stream.rb +30 -45
- data/lib/rdoc/tom_doc.rb +9 -15
- data/lib/rdoc/version.rb +3 -1
- data/lib/rdoc.rb +90 -52
- data/lib/rubygems_plugin.rb +14 -0
- data/man/ri.1 +2 -0
- data/rdoc-logo.svg +43 -0
- data/rdoc.gemspec +25 -200
- metadata +120 -53
- data/CONTRIBUTING.rdoc +0 -220
- data/ExampleMarkdown.md +0 -37
- data/ExampleRDoc.rdoc +0 -208
- data/Gemfile +0 -12
- data/README.rdoc +0 -129
- data/RI.rdoc +0 -57
- data/Rakefile +0 -101
- data/bin/console +0 -7
- data/bin/setup +0 -6
- data/lib/rdoc/anon_class.rb +0 -11
- data/lib/rdoc/context/section.rb +0 -232
- data/lib/rdoc/generator/template/darkfish/.document +0 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
- data/lib/rdoc/generator/template/json_index/.document +0 -1
- data/lib/rdoc/ghost_method.rb +0 -7
- data/lib/rdoc/markup/attr_changer.rb +0 -23
- data/lib/rdoc/markup/attr_span.rb +0 -36
- data/lib/rdoc/markup/attribute_manager.rb +0 -409
- data/lib/rdoc/markup/attributes.rb +0 -71
- data/lib/rdoc/markup/regexp_handling.rb +0 -41
- data/lib/rdoc/meta_method.rb +0 -7
- data/lib/rdoc/parser/ripper_state_lex.rb +0 -590
- 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
|
-
|
|
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.
|
|
59
|
-
# rdoc.rdoc_files.include("README.
|
|
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.
|
|
75
|
-
# rdoc.rdoc_files.include("README.
|
|
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
|
|
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
|
-
#
|
|
105
|
-
#
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
98
|
-
if @store.
|
|
99
|
-
locale = @store.
|
|
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
|
|
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
|
|
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
|
|
121
|
+
def snippet(text, limit = 100)
|
|
146
122
|
document = parse text
|
|
147
123
|
|
|
148
|
-
RDoc::Markup::ToHtmlSnippet.new(
|
|
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
|
|
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
|
|
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
|
|
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(/"|"/) 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
|
data/lib/rdoc/token_stream.rb
CHANGED
|
@@ -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
|
|
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 :
|
|
24
|
-
when :
|
|
25
|
-
when :
|
|
26
|
-
when :
|
|
27
|
-
when :
|
|
28
|
-
when '
|
|
29
|
-
|
|
30
|
-
when :
|
|
31
|
-
when :
|
|
32
|
-
when :
|
|
33
|
-
when :
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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!(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
225
|
+
def tokenize(text)
|
|
232
226
|
text = text.sub(/\A(Public|Internal|Deprecated):\s+/, '')
|
|
233
227
|
|
|
234
228
|
setup_scanner text
|