rdoc 6.17.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +193 -0
  3. data/LEGAL.rdoc +6 -0
  4. data/LICENSE.rdoc +4 -0
  5. data/README.md +132 -8
  6. data/RI.md +75 -75
  7. data/doc/markup_reference/markdown.md +659 -0
  8. data/doc/markup_reference/rdoc.rdoc +1169 -0
  9. data/exe/rdoc +2 -2
  10. data/lib/rdoc/code_object/alias.rb +70 -74
  11. data/lib/rdoc/code_object/any_method.rb +308 -293
  12. data/lib/rdoc/code_object/attr.rb +150 -142
  13. data/lib/rdoc/code_object/class_module.rb +802 -715
  14. data/lib/rdoc/code_object/constant.rb +181 -144
  15. data/lib/rdoc/code_object/context/section.rb +140 -130
  16. data/lib/rdoc/code_object/context.rb +925 -941
  17. data/lib/rdoc/code_object/extend.rb +7 -5
  18. data/lib/rdoc/code_object/include.rb +7 -5
  19. data/lib/rdoc/code_object/method_attr.rb +328 -315
  20. data/lib/rdoc/code_object/mixin.rb +97 -92
  21. data/lib/rdoc/code_object/normal_class.rb +77 -78
  22. data/lib/rdoc/code_object/normal_module.rb +61 -59
  23. data/lib/rdoc/code_object/require.rb +23 -39
  24. data/lib/rdoc/code_object/single_class.rb +21 -19
  25. data/lib/rdoc/code_object/top_level.rb +215 -202
  26. data/lib/rdoc/code_object.rb +305 -305
  27. data/lib/rdoc/comment.rb +274 -337
  28. data/lib/rdoc/cross_reference.rb +195 -206
  29. data/lib/rdoc/encoding.rb +105 -103
  30. data/lib/rdoc/erb_partial.rb +13 -11
  31. data/lib/rdoc/erbio.rb +29 -27
  32. data/lib/rdoc/generator/aliki.rb +196 -30
  33. data/lib/rdoc/generator/darkfish.rb +647 -629
  34. data/lib/rdoc/generator/json_index.rb +233 -229
  35. data/lib/rdoc/generator/markup.rb +165 -122
  36. data/lib/rdoc/generator/pot/message_extractor.rb +57 -51
  37. data/lib/rdoc/generator/pot/po.rb +52 -51
  38. data/lib/rdoc/generator/pot/po_entry.rb +138 -132
  39. data/lib/rdoc/generator/pot.rb +85 -81
  40. data/lib/rdoc/generator/ri.rb +23 -19
  41. data/lib/rdoc/generator/template/aliki/DESIGN.md +538 -0
  42. data/lib/rdoc/generator/template/aliki/_aside_toc.rhtml +1 -1
  43. data/lib/rdoc/generator/template/aliki/_footer.rhtml +2 -2
  44. data/lib/rdoc/generator/template/aliki/_head.rhtml +15 -10
  45. data/lib/rdoc/generator/template/aliki/_header.rhtml +29 -44
  46. data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +8 -6
  47. data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +8 -6
  48. data/lib/rdoc/generator/template/aliki/_sidebar_installed.rhtml +1 -1
  49. data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +3 -3
  50. data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +3 -3
  51. data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +1 -1
  52. data/lib/rdoc/generator/template/aliki/_sidebar_toggle.rhtml +1 -1
  53. data/lib/rdoc/generator/template/aliki/class.rhtml +71 -61
  54. data/lib/rdoc/generator/template/aliki/css/rdoc.css +796 -323
  55. data/lib/rdoc/generator/template/aliki/index.rhtml +1 -1
  56. data/lib/rdoc/generator/template/aliki/js/aliki.js +119 -113
  57. data/lib/rdoc/generator/template/aliki/js/bash_highlighter.js +167 -0
  58. data/lib/rdoc/generator/template/aliki/js/c_highlighter.js +1 -1
  59. data/lib/rdoc/generator/template/aliki/js/{search.js → search_controller.js} +16 -7
  60. data/lib/rdoc/generator/template/aliki/js/search_navigation.js +105 -0
  61. data/lib/rdoc/generator/template/aliki/js/search_ranker.js +239 -0
  62. data/lib/rdoc/generator/template/aliki/page.rhtml +1 -1
  63. data/lib/rdoc/generator/template/aliki/servlet_not_found.rhtml +1 -1
  64. data/lib/rdoc/generator/template/aliki/servlet_root.rhtml +2 -2
  65. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +1 -1
  66. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +8 -6
  67. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +8 -6
  68. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +1 -1
  69. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +2 -2
  70. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +1 -1
  71. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +5 -5
  72. data/lib/rdoc/generator/template/darkfish/class.rhtml +29 -32
  73. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +19 -1
  74. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +3 -3
  75. data/lib/rdoc/generator.rb +48 -46
  76. data/lib/rdoc/i18n/locale.rb +99 -95
  77. data/lib/rdoc/i18n/text.rb +109 -105
  78. data/lib/rdoc/i18n.rb +7 -5
  79. data/lib/rdoc/markdown/byte_runtime.rb +80 -0
  80. data/lib/rdoc/markdown.kpeg +52 -33
  81. data/lib/rdoc/markdown.rb +365 -177
  82. data/lib/rdoc/markup/blank_line.rb +25 -23
  83. data/lib/rdoc/markup/block_quote.rb +12 -8
  84. data/lib/rdoc/markup/document.rb +127 -123
  85. data/lib/rdoc/markup/element.rb +21 -0
  86. data/lib/rdoc/markup/formatter.rb +220 -203
  87. data/lib/rdoc/markup/hard_break.rb +30 -27
  88. data/lib/rdoc/markup/heading.rb +163 -77
  89. data/lib/rdoc/markup/include.rb +33 -29
  90. data/lib/rdoc/markup/indented_paragraph.rb +37 -33
  91. data/lib/rdoc/markup/inline_parser.rb +316 -0
  92. data/lib/rdoc/markup/list.rb +80 -88
  93. data/lib/rdoc/markup/list_item.rb +73 -85
  94. data/lib/rdoc/markup/paragraph.rb +23 -19
  95. data/lib/rdoc/markup/parser.rb +501 -497
  96. data/lib/rdoc/markup/pre_process.rb +284 -305
  97. data/lib/rdoc/markup/raw.rb +52 -55
  98. data/lib/rdoc/markup/rule.rb +16 -12
  99. data/lib/rdoc/markup/table.rb +48 -40
  100. data/lib/rdoc/markup/to_ansi.rb +143 -92
  101. data/lib/rdoc/markup/to_bs.rb +86 -102
  102. data/lib/rdoc/markup/to_html.rb +608 -506
  103. data/lib/rdoc/markup/to_html_crossref.rb +219 -210
  104. data/lib/rdoc/markup/to_html_snippet.rb +210 -205
  105. data/lib/rdoc/markup/to_joined_paragraph.rb +40 -41
  106. data/lib/rdoc/markup/to_label.rb +64 -51
  107. data/lib/rdoc/markup/to_markdown.rb +212 -184
  108. data/lib/rdoc/markup/to_rdoc.rb +341 -277
  109. data/lib/rdoc/markup/to_table_of_contents.rb +66 -62
  110. data/lib/rdoc/markup/to_test.rb +62 -50
  111. data/lib/rdoc/markup/to_tt_only.rb +83 -92
  112. data/lib/rdoc/markup/verbatim.rb +62 -58
  113. data/lib/rdoc/markup.rb +196 -215
  114. data/lib/rdoc/options.rb +1063 -1076
  115. data/lib/rdoc/parser/c.rb +1039 -1036
  116. data/lib/rdoc/parser/changelog.rb +320 -287
  117. data/lib/rdoc/parser/markdown.rb +17 -13
  118. data/lib/rdoc/parser/rbs.rb +279 -0
  119. data/lib/rdoc/parser/rd.rb +17 -13
  120. data/lib/rdoc/parser/ruby.rb +1231 -2222
  121. data/lib/rdoc/parser/ruby_colorizer.rb +303 -0
  122. data/lib/rdoc/parser/simple.rb +31 -27
  123. data/lib/rdoc/parser/text.rb +12 -8
  124. data/lib/rdoc/parser.rb +230 -221
  125. data/lib/rdoc/rbs_helper.rb +186 -0
  126. data/lib/rdoc/rd/inline.rb +57 -53
  127. data/lib/rdoc/rd.rb +90 -88
  128. data/lib/rdoc/rdoc.rb +547 -366
  129. data/lib/rdoc/ri/driver.rb +1141 -1130
  130. data/lib/rdoc/ri/formatter.rb +7 -3
  131. data/lib/rdoc/ri/paths.rb +140 -136
  132. data/lib/rdoc/ri/servlet.rb +456 -0
  133. data/lib/rdoc/ri/store.rb +4 -2
  134. data/lib/rdoc/ri/task.rb +55 -51
  135. data/lib/rdoc/ri.rb +14 -11
  136. data/lib/rdoc/rubygems_hook.rb +194 -192
  137. data/lib/rdoc/server.rb +462 -0
  138. data/lib/rdoc/stats/normal.rb +46 -42
  139. data/lib/rdoc/stats/quiet.rb +39 -35
  140. data/lib/rdoc/stats/verbose.rb +35 -31
  141. data/lib/rdoc/stats.rb +363 -338
  142. data/lib/rdoc/store.rb +919 -725
  143. data/lib/rdoc/task.rb +260 -255
  144. data/lib/rdoc/text.rb +164 -240
  145. data/lib/rdoc/token_stream.rb +88 -106
  146. data/lib/rdoc/tom_doc.rb +203 -201
  147. data/lib/rdoc/version.rb +1 -1
  148. data/lib/rdoc.rb +35 -7
  149. data/lib/rubygems_plugin.rb +2 -11
  150. data/rdoc-logo.svg +43 -0
  151. data/rdoc.gemspec +9 -7
  152. metadata +46 -32
  153. data/CONTRIBUTING.rdoc +0 -219
  154. data/ExampleMarkdown.md +0 -39
  155. data/ExampleRDoc.rdoc +0 -210
  156. data/lib/rdoc/code_object/anon_class.rb +0 -10
  157. data/lib/rdoc/code_object/ghost_method.rb +0 -6
  158. data/lib/rdoc/code_object/meta_method.rb +0 -6
  159. data/lib/rdoc/markdown/literals.kpeg +0 -21
  160. data/lib/rdoc/markdown/literals.rb +0 -454
  161. data/lib/rdoc/markup/attr_changer.rb +0 -22
  162. data/lib/rdoc/markup/attr_span.rb +0 -35
  163. data/lib/rdoc/markup/attribute_manager.rb +0 -405
  164. data/lib/rdoc/markup/attributes.rb +0 -70
  165. data/lib/rdoc/markup/regexp_handling.rb +0 -40
  166. data/lib/rdoc/parser/prism_ruby.rb +0 -1100
  167. data/lib/rdoc/parser/ripper_state_lex.rb +0 -302
  168. data/lib/rdoc/parser/ruby_tools.rb +0 -163
  169. data/lib/rdoc/servlet.rb +0 -452
data/lib/rdoc/erbio.rb CHANGED
@@ -1,37 +1,39 @@
1
1
  # frozen_string_literal: true
2
2
  require 'erb'
3
3
 
4
- ##
5
- # A subclass of ERB that writes directly to an IO. Credit to Aaron Patterson
6
- # and Masatoshi SEKI.
7
- #
8
- # To use:
9
- #
10
- # erbio = RDoc::ERBIO.new '<%= "hello world" %>', nil, nil
11
- #
12
- # File.open 'hello.txt', 'w' do |io|
13
- # erbio.result binding
14
- # end
15
- #
16
- # Note that binding must enclose the io you wish to output on.
4
+ module RDoc
5
+ ##
6
+ # A subclass of ERB that writes directly to an IO. Credit to Aaron Patterson
7
+ # and Masatoshi SEKI.
8
+ #
9
+ # To use:
10
+ #
11
+ # erbio = RDoc::ERBIO.new '<%= "hello world" %>', nil, nil
12
+ #
13
+ # File.open 'hello.txt', 'w' do |io|
14
+ # erbio.result binding
15
+ # end
16
+ #
17
+ # Note that binding must enclose the io you wish to output on.
17
18
 
18
- class RDoc::ERBIO < ERB
19
+ class ERBIO < ERB
19
20
 
20
- ##
21
- # Defaults +eoutvar+ to 'io', otherwise is identical to ERB's initialize
21
+ ##
22
+ # Defaults +eoutvar+ to 'io', otherwise is identical to ERB's initialize
22
23
 
23
- def initialize(str, trim_mode: nil, eoutvar: 'io')
24
- super(str, trim_mode: trim_mode, eoutvar: eoutvar)
25
- end
24
+ def initialize(str, trim_mode: nil, eoutvar: 'io')
25
+ super(str, trim_mode: trim_mode, eoutvar: eoutvar)
26
+ end
26
27
 
27
- ##
28
- # Instructs +compiler+ how to write to +io_variable+
28
+ ##
29
+ # Instructs +compiler+ how to write to +io_variable+
29
30
 
30
- def set_eoutvar(compiler, io_variable)
31
- compiler.put_cmd = "#{io_variable}.write"
32
- compiler.insert_cmd = "#{io_variable}.write"
33
- compiler.pre_cmd = []
34
- compiler.post_cmd = []
35
- end
31
+ def set_eoutvar(compiler, io_variable)
32
+ compiler.put_cmd = "#{io_variable}.write"
33
+ compiler.insert_cmd = "#{io_variable}.write"
34
+ compiler.pre_cmd = []
35
+ compiler.post_cmd = []
36
+ end
36
37
 
38
+ end
37
39
  end
@@ -1,42 +1,208 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- ##
4
- # Aliki theme for RDoc documentation
5
- #
6
- # Author: Stan Lo
7
- #
8
-
9
- class RDoc::Generator::Aliki < RDoc::Generator::Darkfish
10
- RDoc::RDoc.add_generator self
11
-
12
- def initialize(store, options)
13
- super
14
- aliki_template_dir = File.expand_path(File.join(__dir__, 'template', 'aliki'))
15
- @template_dir = Pathname.new(aliki_template_dir)
16
- end
3
+ require 'uri'
17
4
 
18
- ##
19
- # Copy only the static assets required by the Aliki theme. Unlike Darkfish we
20
- # don't ship embedded fonts or image sprites, so limit the asset list to keep
21
- # generated documentation lightweight.
5
+ module RDoc
6
+ module Generator
7
+ ##
8
+ # Aliki theme for RDoc documentation
9
+ #
10
+ # Author: Stan Lo
11
+ #
22
12
 
23
- def write_style_sheet
24
- debug_msg "Copying Aliki static files"
25
- options = { verbose: $DEBUG_RDOC, noop: @dry_run }
13
+ class Aliki < Generator::Darkfish
14
+ DESCRIPTION = 'HTML generator, written by Stan Lo'
26
15
 
27
- install_rdoc_static_file @template_dir + 'css/rdoc.css', "./css/rdoc.css", options
16
+ RDoc.add_generator self
28
17
 
29
- unless @options.template_stylesheets.empty?
30
- FileUtils.cp @options.template_stylesheets, '.', **options
31
- end
18
+ def initialize(store, options)
19
+ super
20
+ aliki_template_dir = File.expand_path(File.join(__dir__, 'template', 'aliki'))
21
+ @template_dir = Pathname.new(aliki_template_dir)
22
+ end
23
+
24
+ ##
25
+ # Generate documentation. Overrides Darkfish to use Aliki's own search index
26
+ # instead of the JsonIndex generator.
27
+
28
+ def generate
29
+ setup
30
+
31
+ write_style_sheet
32
+ generate_index
33
+ generate_class_files
34
+ generate_file_files
35
+ generate_table_of_contents
36
+ write_search_index
37
+
38
+ copy_static
39
+
40
+ rescue => e
41
+ debug_msg "%s: %s\n %s" % [
42
+ e.class.name, e.message, e.backtrace.join("\n ")
43
+ ]
44
+
45
+ raise
46
+ end
47
+
48
+ ##
49
+ # Copy only the static assets required by the Aliki theme. Unlike Darkfish we
50
+ # don't ship embedded fonts or image sprites, so limit the asset list to keep
51
+ # generated documentation lightweight.
52
+
53
+ def write_style_sheet
54
+ debug_msg "Copying Aliki static files"
55
+ options = { verbose: $DEBUG_RDOC, noop: @dry_run }
56
+
57
+ install_rdoc_static_file @template_dir + 'css/rdoc.css', "./css/rdoc.css", options
58
+
59
+ unless @options.template_stylesheets.empty?
60
+ FileUtils.cp @options.template_stylesheets, '.', **options
61
+ end
62
+
63
+ Dir[(@template_dir + 'js/**/*').to_s].each do |path|
64
+ next if File.directory?(path)
65
+ next if File.basename(path).start_with?('.')
66
+
67
+ dst = Pathname.new(path).relative_path_from(@template_dir)
68
+
69
+ install_rdoc_static_file @template_dir + path, dst, options
70
+ end
71
+ end
72
+
73
+ ##
74
+ # Build a search index array for Aliki's searcher.
75
+
76
+ def build_search_index
77
+ setup
78
+
79
+ index = []
80
+
81
+ @classes.each do |klass|
82
+ next unless klass.display?
83
+
84
+ index << build_class_module_entry(klass)
85
+
86
+ klass.constants.each do |const|
87
+ next unless const.display?
88
+
89
+ index << build_constant_entry(const, klass)
90
+ end
91
+ end
92
+
93
+ @methods.each do |method|
94
+ next unless method.display?
95
+
96
+ index << build_method_entry(method)
97
+ end
98
+
99
+ index
100
+ end
101
+
102
+ ##
103
+ # Write the search index as a JavaScript file
104
+ # Format: var search_data = { index: [...] }
105
+ #
106
+ # We still write to a .js instead of a .json because loading a JSON file triggers CORS check in browsers.
107
+ # And if we simply inspect the generated pages using file://, which is often the case due to lack of the server mode,
108
+ # the JSON file will be blocked by the browser.
109
+
110
+ def write_search_index
111
+ debug_msg "Writing Aliki search index"
112
+
113
+ index = build_search_index
114
+
115
+ FileUtils.mkdir_p 'js' unless @dry_run
116
+
117
+ search_index_path = 'js/search_data.js'
118
+ return if @dry_run
119
+
120
+ data = { index: index }
121
+ File.write search_index_path, "var search_data = #{JSON.generate(data)};"
122
+ end
123
+
124
+ ##
125
+ # Returns the type signature of +method_attr+ as HTML with linked type names.
126
+ # Returns nil if no type signature is present.
127
+
128
+ def type_signature_html(method_attr, from_path)
129
+ lines = method_attr.type_signature_lines || @store.rbs_signature_for(method_attr)
130
+ return unless lines
131
+
132
+ RbsHelper.signature_to_html(
133
+ lines,
134
+ lookup: @store.type_name_lookup,
135
+ from_path: from_path
136
+ )
137
+ end
138
+
139
+ ##
140
+ # Resolves a URL for use in templates. Absolute URLs are returned unchanged.
141
+ # Relative URLs are prefixed with rel_prefix to ensure they resolve correctly from any page.
142
+
143
+ def resolve_url(rel_prefix, url)
144
+ uri = URI.parse(url)
145
+ if uri.absolute?
146
+ url
147
+ else
148
+ "#{rel_prefix}/#{url}"
149
+ end
150
+ rescue URI::InvalidURIError
151
+ "#{rel_prefix}/#{url}"
152
+ end
153
+
154
+ private
155
+
156
+ def template_encoding
157
+ ::Encoding::UTF_8
158
+ end
159
+
160
+ def build_class_module_entry(klass)
161
+ type = case klass
162
+ when NormalClass then 'class'
163
+ when NormalModule then 'module'
164
+ else 'class'
165
+ end
166
+
167
+ entry = {
168
+ name: klass.name,
169
+ full_name: klass.full_name,
170
+ type: type,
171
+ path: klass.path
172
+ }
173
+
174
+ snippet = klass.search_snippet
175
+ entry[:snippet] = snippet unless snippet.empty?
176
+ entry
177
+ end
178
+
179
+ def build_method_entry(method)
180
+ type = method.singleton ? 'class_method' : 'instance_method'
181
+
182
+ entry = {
183
+ name: method.name,
184
+ full_name: method.full_name,
185
+ type: type,
186
+ path: method.path
187
+ }
32
188
 
33
- Dir[(@template_dir + 'js/**/*').to_s].each do |path|
34
- next if File.directory?(path)
35
- next if File.basename(path).start_with?('.')
189
+ snippet = method.search_snippet
190
+ entry[:snippet] = snippet unless snippet.empty?
191
+ entry
192
+ end
36
193
 
37
- dst = Pathname.new(path).relative_path_from(@template_dir)
194
+ def build_constant_entry(const, parent)
195
+ entry = {
196
+ name: const.name,
197
+ full_name: "#{parent.full_name}::#{const.name}",
198
+ type: 'constant',
199
+ path: parent.path
200
+ }
38
201
 
39
- install_rdoc_static_file @template_dir + path, dst, options
202
+ snippet = const.search_snippet
203
+ entry[:snippet] = snippet unless snippet.empty?
204
+ entry
205
+ end
40
206
  end
41
207
  end
42
208
  end