rdoc 2.4.3 → 2.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rdoc might be problematic. Click here for more details.

Files changed (139) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.autotest +3 -1
  3. data/History.txt +68 -0
  4. data/LICENSE.txt +57 -0
  5. data/Manifest.txt +37 -19
  6. data/README.txt +2 -12
  7. data/Rakefile +12 -12
  8. data/bin/rdoc +4 -4
  9. data/lib/rdoc.rb +32 -9
  10. data/lib/rdoc/alias.rb +2 -2
  11. data/lib/rdoc/any_method.rb +108 -16
  12. data/lib/rdoc/attr.rb +87 -1
  13. data/lib/rdoc/class_module.rb +131 -5
  14. data/lib/rdoc/code_object.rb +28 -5
  15. data/lib/rdoc/constant.rb +22 -0
  16. data/lib/rdoc/context.rb +80 -37
  17. data/lib/rdoc/gauntlet.rb +48 -0
  18. data/lib/rdoc/generator/darkfish.rb +25 -23
  19. data/lib/rdoc/generator/markup.rb +6 -29
  20. data/lib/rdoc/generator/ri.rb +39 -189
  21. data/lib/rdoc/generator/template/darkfish/classpage.rhtml +17 -1
  22. data/lib/rdoc/generator/template/darkfish/filepage.rhtml +10 -0
  23. data/lib/rdoc/generator/template/darkfish/images/brick.png +0 -0
  24. data/lib/rdoc/generator/template/darkfish/images/brick_link.png +0 -0
  25. data/lib/rdoc/generator/template/darkfish/images/bullet_black.png +0 -0
  26. data/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png +0 -0
  27. data/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png +0 -0
  28. data/lib/rdoc/generator/template/darkfish/images/date.png +0 -0
  29. data/lib/rdoc/generator/template/darkfish/images/find.png +0 -0
  30. data/lib/rdoc/generator/template/darkfish/images/package.png +0 -0
  31. data/lib/rdoc/generator/template/darkfish/images/page_green.png +0 -0
  32. data/lib/rdoc/generator/template/darkfish/images/page_white_text.png +0 -0
  33. data/lib/rdoc/generator/template/darkfish/images/page_white_width.png +0 -0
  34. data/lib/rdoc/generator/template/darkfish/images/plugin.png +0 -0
  35. data/lib/rdoc/generator/template/darkfish/images/ruby.png +0 -0
  36. data/lib/rdoc/generator/template/darkfish/images/tag_green.png +0 -0
  37. data/lib/rdoc/generator/template/darkfish/images/wrench.png +0 -0
  38. data/lib/rdoc/generator/template/darkfish/images/wrench_orange.png +0 -0
  39. data/lib/rdoc/generator/template/darkfish/images/zoom.png +0 -0
  40. data/lib/rdoc/generator/template/darkfish/index.rhtml +2 -2
  41. data/lib/rdoc/generator/template/darkfish/rdoc.css +38 -33
  42. data/lib/rdoc/include.rb +22 -0
  43. data/lib/rdoc/markup.rb +10 -262
  44. data/lib/rdoc/markup/attribute_manager.rb +57 -50
  45. data/lib/rdoc/markup/blank_line.rb +19 -0
  46. data/lib/rdoc/markup/document.rb +72 -0
  47. data/lib/rdoc/markup/formatter.rb +118 -0
  48. data/lib/rdoc/markup/formatter_test_case.rb +341 -0
  49. data/lib/rdoc/markup/heading.rb +17 -0
  50. data/lib/rdoc/markup/inline.rb +6 -5
  51. data/lib/rdoc/markup/list.rb +78 -0
  52. data/lib/rdoc/markup/list_item.rb +83 -0
  53. data/lib/rdoc/markup/paragraph.rb +66 -0
  54. data/lib/rdoc/markup/parser.rb +528 -0
  55. data/lib/rdoc/markup/rule.rb +17 -0
  56. data/lib/rdoc/markup/to_ansi.rb +72 -0
  57. data/lib/rdoc/markup/to_bs.rb +74 -0
  58. data/lib/rdoc/markup/to_html.rb +106 -172
  59. data/lib/rdoc/markup/to_html_crossref.rb +10 -4
  60. data/lib/rdoc/markup/to_rdoc.rb +243 -0
  61. data/lib/rdoc/markup/to_test.rb +27 -16
  62. data/lib/rdoc/markup/verbatim.rb +42 -0
  63. data/lib/rdoc/normal_class.rb +38 -1
  64. data/lib/rdoc/normal_module.rb +38 -8
  65. data/lib/rdoc/options.rb +39 -151
  66. data/lib/rdoc/parser.rb +36 -18
  67. data/lib/rdoc/parser/c.rb +102 -109
  68. data/lib/rdoc/parser/ruby.rb +359 -1662
  69. data/lib/rdoc/parser/ruby_tools.rb +157 -0
  70. data/lib/rdoc/parser/simple.rb +0 -2
  71. data/lib/rdoc/rdoc.rb +142 -82
  72. data/lib/rdoc/ri.rb +10 -0
  73. data/lib/rdoc/ri/driver.rb +674 -444
  74. data/lib/rdoc/ri/formatter.rb +2 -651
  75. data/lib/rdoc/ri/paths.rb +70 -45
  76. data/lib/rdoc/ri/store.rb +248 -0
  77. data/lib/rdoc/ruby_lex.rb +1284 -0
  78. data/lib/rdoc/ruby_token.rb +416 -0
  79. data/lib/rdoc/single_class.rb +5 -0
  80. data/lib/rdoc/stats.rb +152 -83
  81. data/lib/rdoc/task.rb +27 -49
  82. data/lib/rdoc/text.rb +130 -0
  83. data/lib/rdoc/tokenstream.rb +28 -9
  84. data/lib/rdoc/top_level.rb +49 -43
  85. data/test/hidden.zip.txt +1 -0
  86. data/test/test_attribute_manager.rb +9 -16
  87. data/test/test_rdoc_any_method.rb +23 -0
  88. data/test/test_rdoc_attr.rb +40 -0
  89. data/test/test_rdoc_class_module.rb +100 -0
  90. data/test/test_rdoc_code_object.rb +18 -2
  91. data/test/test_rdoc_context.rb +41 -0
  92. data/test/test_rdoc_generator_ri.rb +56 -0
  93. data/test/test_rdoc_markup.rb +21 -610
  94. data/test/test_rdoc_markup_attribute_manager.rb +14 -17
  95. data/test/test_rdoc_markup_document.rb +51 -0
  96. data/test/test_rdoc_markup_paragraph.rb +27 -0
  97. data/test/test_rdoc_markup_parser.rb +1327 -0
  98. data/test/test_rdoc_markup_to_ansi.rb +426 -0
  99. data/test/test_rdoc_markup_to_bs.rb +443 -0
  100. data/test/test_rdoc_markup_to_html.rb +183 -18
  101. data/test/test_rdoc_markup_to_html_crossref.rb +1 -3
  102. data/test/test_rdoc_markup_to_rdoc.rb +426 -0
  103. data/test/test_rdoc_normal_class.rb +17 -0
  104. data/test/test_rdoc_normal_module.rb +6 -6
  105. data/test/test_rdoc_options.rb +41 -0
  106. data/test/test_rdoc_parser.rb +66 -13
  107. data/test/test_rdoc_parser_c.rb +93 -38
  108. data/test/test_rdoc_parser_perl.rb +2 -3
  109. data/test/test_rdoc_parser_ruby.rb +291 -28
  110. data/test/test_rdoc_parser_simple.rb +48 -0
  111. data/test/test_rdoc_rdoc.rb +66 -0
  112. data/test/test_rdoc_ri_driver.rb +752 -38
  113. data/test/test_rdoc_ri_paths.rb +39 -0
  114. data/test/test_rdoc_ri_store.rb +309 -0
  115. data/test/test_rdoc_text.rb +157 -0
  116. data/test/test_rdoc_top_level.rb +35 -9
  117. data/test/xref_data.rb +9 -1
  118. data/test/xref_test_case.rb +8 -3
  119. metadata +110 -38
  120. metadata.gz.sig +0 -0
  121. data/lib/rdoc/cache.rb +0 -41
  122. data/lib/rdoc/diagram.rb +0 -340
  123. data/lib/rdoc/dot.rb +0 -249
  124. data/lib/rdoc/markup/fragments.rb +0 -377
  125. data/lib/rdoc/markup/lines.rb +0 -156
  126. data/lib/rdoc/markup/to_flow.rb +0 -211
  127. data/lib/rdoc/markup/to_latex.rb +0 -328
  128. data/lib/rdoc/markup/to_texinfo.rb +0 -73
  129. data/lib/rdoc/ri/cache.rb +0 -187
  130. data/lib/rdoc/ri/descriptions.rb +0 -156
  131. data/lib/rdoc/ri/display.rb +0 -340
  132. data/lib/rdoc/ri/reader.rb +0 -106
  133. data/lib/rdoc/ri/util.rb +0 -79
  134. data/lib/rdoc/ri/writer.rb +0 -68
  135. data/test/test_rdoc_ri_attribute_formatter.rb +0 -44
  136. data/test/test_rdoc_ri_default_display.rb +0 -302
  137. data/test/test_rdoc_ri_formatter.rb +0 -320
  138. data/test/test_rdoc_ri_html_formatter.rb +0 -141
  139. data/test/test_rdoc_ri_overstrike_formatter.rb +0 -71
@@ -1,9 +1,10 @@
1
+ require 'rdoc/text'
1
2
  require 'rdoc/code_objects'
2
3
  require 'rdoc/generator'
3
4
  require 'rdoc/markup/to_html_crossref'
4
5
 
5
6
  ##
6
- # Handle common HTML markup tasks for various CodeObjects
7
+ # Handle common RDoc::Markup tasks for various CodeObjects
7
8
 
8
9
  module RDoc::Generator::Markup
9
10
 
@@ -29,7 +30,7 @@ module RDoc::Generator::Markup
29
30
  end
30
31
 
31
32
  ##
32
- # RDoc::Markup formatter object
33
+ # Creates an RDoc::Markup::ToHtmlCrossref formatter
33
34
 
34
35
  def formatter
35
36
  return @formatter if defined? @formatter
@@ -39,30 +40,6 @@ module RDoc::Generator::Markup
39
40
  @formatter = RDoc::Markup::ToHtmlCrossref.new this.path, this, show_hash
40
41
  end
41
42
 
42
- ##
43
- # Convert a string in markup format into HTML.
44
-
45
- def markup(str, remove_para = false)
46
- return '' unless str
47
-
48
- # Convert leading comment markers to spaces, but only if all non-blank
49
- # lines have them
50
- if str =~ /^(?>\s*)[^\#]/ then
51
- content = str
52
- else
53
- content = str.gsub(/^\s*(#+)/) { $1.tr '#', ' ' }
54
- end
55
-
56
- res = formatter.convert content
57
-
58
- if remove_para then
59
- res.sub!(/^<p>/, '')
60
- res.sub!(/<\/p>$/, '')
61
- end
62
-
63
- res
64
- end
65
-
66
43
  ##
67
44
  # Build a webcvs URL starting for the given +url+ with +full_path+ appended
68
45
  # as the destination path. If +url+ contains '%s' +full_path+ will be
@@ -99,7 +76,7 @@ class RDoc::AnyMethod
99
76
  res = if line == first then
100
77
  " " * (size + 2)
101
78
  else
102
- "%#{size}d: " % line
79
+ "%2$*1$d: " % [size, line]
103
80
  end
104
81
 
105
82
  line += 1
@@ -134,7 +111,7 @@ class RDoc::AnyMethod
134
111
  nil
135
112
  end
136
113
 
137
- text = CGI.escapeHTML(t.text)
114
+ text = CGI.escapeHTML t.text
138
115
 
139
116
  if style
140
117
  src << "<span class=\"#{style}\">#{text}</span>"
@@ -143,7 +120,7 @@ class RDoc::AnyMethod
143
120
  end
144
121
  end
145
122
 
146
- add_line_numbers src if RDoc::RDoc.current.options.include_line_numbers
123
+ add_line_numbers src
147
124
 
148
125
  src
149
126
  end
@@ -1,229 +1,79 @@
1
1
  require 'rdoc/generator'
2
- require 'rdoc/markup/to_flow'
2
+ require 'rdoc/ri'
3
3
 
4
- require 'rdoc/ri/cache'
5
- require 'rdoc/ri/reader'
6
- require 'rdoc/ri/writer'
7
- require 'rdoc/ri/descriptions'
4
+ ##
5
+ # Generates ri data files
8
6
 
9
7
  class RDoc::Generator::RI
10
8
 
11
9
  RDoc::RDoc.add_generator self
12
10
 
13
- ##
14
- # Generator may need to return specific subclasses depending on the
15
- # options they are passed. Because of this we create them using a factory
16
-
17
- def self.for(options)
18
- new(options)
11
+ def self.for options
12
+ new options
19
13
  end
20
14
 
21
15
  ##
22
16
  # Set up a new ri generator
23
17
 
24
- def initialize(options) #:not-new:
25
- @options = options
26
- @ri_writer = RDoc::RI::Writer.new "."
27
- @markup = RDoc::Markup.new
28
- @to_flow = RDoc::Markup::ToFlow.new
29
-
30
- @generated = {}
18
+ def initialize options #:not-new:
19
+ @options = options
20
+ @store = RDoc::RI::Store.new '.'
21
+ @old_siginfo = nil
22
+ @current = nil
31
23
  end
32
24
 
33
25
  ##
34
- # Build the initial indices and output objects based on an array of
35
- # TopLevel objects containing the extracted information.
36
-
37
- def generate(top_levels)
38
- RDoc::TopLevel.all_classes_and_modules.each do |cls|
39
- process_class cls
40
- end
41
- end
42
-
43
- def process_class(from_class)
44
- generate_class_info(from_class)
45
-
46
- # now recurse into this class' constituent classes
47
- from_class.each_classmodule do |mod|
48
- process_class(mod)
49
- end
50
- end
51
-
52
- def generate_class_info(cls)
53
- case cls
54
- when RDoc::NormalModule then
55
- cls_desc = RDoc::RI::ModuleDescription.new
56
- else
57
- cls_desc = RDoc::RI::ClassDescription.new
58
- superclass = cls.superclass
59
- superclass = superclass.full_name unless String === superclass
60
- cls_desc.superclass = superclass
61
- end
26
+ # Build the initial indices and output objects based on an array of TopLevel
27
+ # objects containing the extracted information.
62
28
 
63
- cls_desc.name = cls.name
64
- cls_desc.full_name = cls.full_name
65
- cls_desc.comment = markup(cls.comment)
29
+ def generate top_levels
30
+ install_siginfo_handler
66
31
 
67
- cls_desc.attributes = cls.attributes.sort.map do |a|
68
- RDoc::RI::Attribute.new(a.name, a.rw, markup(a.comment))
69
- end
70
-
71
- cls_desc.constants = cls.constants.map do |c|
72
- RDoc::RI::Constant.new(c.name, c.value, markup(c.comment))
73
- end
74
-
75
- cls_desc.includes = cls.includes.map do |i|
76
- RDoc::RI::IncludedModule.new(i.name)
77
- end
78
-
79
- class_methods, instance_methods = method_list(cls)
32
+ RDoc::TopLevel.all_classes_and_modules.each do |klass|
33
+ @current = "#{klass.class}: #{klass.full_name}"
80
34
 
81
- cls_desc.class_methods = class_methods.map do |m|
82
- RDoc::RI::MethodSummary.new(m.name)
83
- end
84
-
85
- cls_desc.instance_methods = instance_methods.map do |m|
86
- RDoc::RI::MethodSummary.new(m.name)
87
- end
35
+ @store.save_class klass
88
36
 
89
- update_or_replace(cls_desc)
90
-
91
- class_methods.each do |m|
92
- generate_method_info(cls_desc, m)
93
- end
37
+ klass.each_method do |method|
38
+ @current = "#{method.class}: #{method.full_name}"
39
+ @store.save_method klass, method
40
+ end
94
41
 
95
- instance_methods.each do |m|
96
- generate_method_info(cls_desc, m)
42
+ klass.each_attribute do |attribute|
43
+ @store.save_method klass, attribute
44
+ end
97
45
  end
98
- end
99
46
 
100
- def generate_method_info(cls_desc, method)
101
- meth_desc = RDoc::RI::MethodDescription.new
102
- meth_desc.name = method.name
103
- meth_desc.full_name = cls_desc.full_name
104
- if method.singleton
105
- meth_desc.full_name += "::"
106
- else
107
- meth_desc.full_name += "#"
108
- end
109
- meth_desc.full_name << method.name
47
+ @current = 'saving cache'
110
48
 
111
- meth_desc.comment = markup(method.comment)
112
- meth_desc.params = params_of(method)
113
- meth_desc.visibility = method.visibility.to_s
114
- meth_desc.is_singleton = method.singleton
115
- meth_desc.block_params = method.block_params
49
+ @store.save_cache
116
50
 
117
- meth_desc.aliases = method.aliases.map do |a|
118
- RDoc::RI::AliasName.new(a.name)
119
- end
51
+ ensure
52
+ @current = nil
120
53
 
121
- @ri_writer.add_method(cls_desc, meth_desc)
54
+ remove_siginfo_handler
122
55
  end
123
56
 
124
- private
125
-
126
57
  ##
127
- # Returns a list of class and instance methods that we'll be documenting
128
-
129
- def method_list(cls)
130
- list = cls.method_list
131
- unless @options.show_all
132
- list = list.find_all do |m|
133
- m.visibility == :public || m.visibility == :protected || m.force_documentation
134
- end
135
- end
58
+ # Installs a siginfo handler that prints the current filename.
136
59
 
137
- c = []
138
- i = []
139
- list.sort.each do |m|
140
- if m.singleton
141
- c << m
142
- else
143
- i << m
144
- end
145
- end
146
- return c,i
147
- end
60
+ def install_siginfo_handler
61
+ return unless Signal.list.key? 'INFO'
148
62
 
149
- def params_of(method)
150
- if method.call_seq
151
- method.call_seq
152
- else
153
- params = method.params || ""
154
-
155
- p = params.gsub(/\s*\#.*/, '')
156
- p = p.tr("\n", " ").squeeze(" ")
157
- p = "(" + p + ")" unless p[0] == ?(
158
-
159
- if (block = method.block_params)
160
- block.gsub!(/\s*\#.*/, '')
161
- block = block.tr("\n", " ").squeeze(" ")
162
- if block[0] == ?(
163
- block.sub!(/^\(/, '').sub!(/\)/, '')
164
- end
165
- p << " {|#{block.strip}| ...}"
166
- end
167
- p
63
+ @old_siginfo = trap 'INFO' do
64
+ puts @current if @current
168
65
  end
169
66
  end
170
67
 
171
- def markup(comment)
172
- return nil if !comment || comment.empty?
173
-
174
- # Convert leading comment markers to spaces, but only
175
- # if all non-blank lines have them
176
-
177
- if comment =~ /^(?>\s*)[^\#]/
178
- content = comment
179
- else
180
- content = comment.gsub(/^\s*(#+)/) { $1.tr('#',' ') }
181
- end
182
- @markup.convert(content, @to_flow)
183
- end
184
-
185
68
  ##
186
- # By default we replace existing classes with the same name. If the
187
- # --merge option was given, we instead merge this definition into an
188
- # existing class. We add our methods, aliases, etc to that class, but do
189
- # not change the class's description.
190
-
191
- def update_or_replace(cls_desc)
192
- old_cls = nil
193
-
194
- if @options.merge
195
- rdr = RDoc::RI::Reader.new RDoc::RI::Cache.new(@options.op_dir)
196
-
197
- namespace = rdr.top_level_namespace
198
- namespace = rdr.lookup_namespace_in(cls_desc.name, namespace)
199
- if namespace.empty?
200
- $stderr.puts "You asked me to merge this source into existing "
201
- $stderr.puts "documentation. This file references a class or "
202
- $stderr.puts "module called #{cls_desc.name} which I don't"
203
- $stderr.puts "have existing documentation for."
204
- $stderr.puts
205
- $stderr.puts "Perhaps you need to generate its documentation first"
206
- exit 1
207
- else
208
- old_cls = namespace[0]
209
- end
210
- end
211
-
212
- prev_cls = @generated[cls_desc.full_name]
69
+ # Removes a siginfo handler and replaces the previous
213
70
 
214
- if old_cls and not prev_cls then
215
- old_desc = rdr.get_class old_cls
216
- cls_desc.merge_in old_desc
217
- end
218
-
219
- if prev_cls then
220
- cls_desc.merge_in prev_cls
221
- end
71
+ def remove_siginfo_handler
72
+ return unless Signal.list.key? 'INFO'
222
73
 
223
- @generated[cls_desc.full_name] = cls_desc
74
+ handler = @old_siginfo || 'DEFAULT'
224
75
 
225
- @ri_writer.remove_class cls_desc
226
- @ri_writer.add_class cls_desc
76
+ trap 'INFO', handler
227
77
  end
228
78
 
229
79
  end
@@ -22,6 +22,16 @@
22
22
  <body class="<%= klass.type %>">
23
23
 
24
24
  <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="<%= rel_prefix %>/index.html">Home</a>
29
+ <a href="<%= rel_prefix %>/index.html#classes">Classes</a>
30
+ <a href="<%= rel_prefix %>/index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
25
35
  <div id="file-metadata">
26
36
  <div id="file-list-section" class="section">
27
37
  <h3 class="section-header">In Files</h3>
@@ -217,7 +227,7 @@
217
227
 
218
228
  <div class="method-heading">
219
229
  <% if method.call_seq %>
220
- <span class="method-callseq"><%= method.call_seq.strip.gsub(/->/, '&rarr;').gsub( /^\w.*?\./m, '') %></span>
230
+ <span class="method-callseq"><%= method.call_seq.strip.gsub(/->/, '&rarr;').gsub( /^\w.+\./m, '') %></span>
221
231
  <span class="method-click-advice">click to toggle source</span>
222
232
  <% else %>
223
233
  <span class="method-name"><%= h method.name %></span><span
@@ -250,6 +260,12 @@
250
260
  end.join(", ") %>
251
261
  </div>
252
262
  <% end %>
263
+
264
+ <% if method.is_alias_for then %>
265
+ <div class="aliases">
266
+ Alias for: <a href="<%= klass.aref_to method.is_alias_for.path %>"><%= h method.is_alias_for.name %></a>
267
+ </div>
268
+ <% end %>
253
269
  </div>
254
270
 
255
271
  <% end %>
@@ -23,6 +23,16 @@
23
23
  <% if file.parser == RDoc::Parser::Simple %>
24
24
  <body class="file">
25
25
  <div id="metadata">
26
+ <div id="home-metadata">
27
+ <div id="home-section" class="section">
28
+ <h3 class="section-header">
29
+ <a href="<%= rel_prefix %>/index.html">Home</a>
30
+ <a href="<%= rel_prefix %>/index.html#classes">Classes</a>
31
+ <a href="<%= rel_prefix %>/index.html#methods">Methods</a>
32
+ </h3>
33
+ </div>
34
+ </div>
35
+
26
36
  <div id="project-metadata">
27
37
  <% simple_files = @files.select { |f| f.parser == RDoc::Parser::Simple } %>
28
38
  <% unless simple_files.empty? then %>
@@ -39,14 +39,14 @@
39
39
  </ul>
40
40
  <% end %>
41
41
 
42
- <h2>Classes/Modules</h2>
42
+ <h2 id="classes">Classes/Modules</h2>
43
43
  <ul>
44
44
  <% @modsort.each do |klass| %>
45
45
  <li class="<%= klass.type %>"><a href="<%= klass.path %>"><%= klass.full_name %></a></li>
46
46
  <% end %>
47
47
  </ul>
48
48
 
49
- <h2>Methods</h2>
49
+ <h2 id="methods">Methods</h2>
50
50
  <ul>
51
51
  <% RDoc::TopLevel.all_classes_and_modules.map do |mod|
52
52
  mod.method_list