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
@@ -0,0 +1,416 @@
1
+ #--
2
+ # irb/ruby-token.rb - ruby tokens
3
+ # $Release Version: 0.9.5$
4
+ # $Revision: 11708 $
5
+ # $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6
+ # by Keiju ISHITSUKA(keiju@ruby-lang.org)
7
+ #++
8
+ # Definitions of all tokens involved in the lexical analysis.
9
+ #
10
+ # This class is not documented because it is so deep in the internals.
11
+
12
+ module RDoc::RubyToken
13
+ # :stopdoc:
14
+
15
+ EXPR_BEG = :EXPR_BEG
16
+ EXPR_MID = :EXPR_MID
17
+ EXPR_END = :EXPR_END
18
+ EXPR_ARG = :EXPR_ARG
19
+ EXPR_FNAME = :EXPR_FNAME
20
+ EXPR_DOT = :EXPR_DOT
21
+ EXPR_CLASS = :EXPR_CLASS
22
+
23
+ # for ruby 1.4X
24
+ if !defined?(Symbol)
25
+ Symbol = Integer
26
+ end
27
+
28
+ def set_token_position(line, char)
29
+ @prev_line_no = line
30
+ @prev_char_no = char
31
+ end
32
+
33
+ class Token
34
+ def initialize(seek, line_no, char_no, text = nil)
35
+ @seek = seek
36
+ @line_no = line_no
37
+ @char_no = char_no
38
+ @text = text
39
+ end
40
+
41
+ attr :seek
42
+ attr :line_no
43
+ attr :char_no
44
+
45
+ attr_accessor :text
46
+
47
+ def ==(other)
48
+ self.class == other.class and
49
+ other.line_no == @line_no and
50
+ other.char_no == @char_no and
51
+ other.text == @text
52
+ end
53
+
54
+ ##
55
+ # Because we're used in contexts that expect to return a token, we set the
56
+ # text string and then return ourselves
57
+
58
+ def set_text(text)
59
+ @text = text
60
+ self
61
+ end
62
+
63
+ end
64
+
65
+ class TkNode < Token
66
+ def initialize(seek, line_no, char_no, node = nil)
67
+ super seek, line_no, char_no
68
+ @node = node
69
+ end
70
+
71
+ attr :node
72
+
73
+ def ==(other)
74
+ self.class == other.class and
75
+ other.line_no == @line_no and
76
+ other.char_no == @char_no and
77
+ other.node == @node
78
+ end
79
+
80
+ def set_text text
81
+ @node = text
82
+ self
83
+ end
84
+
85
+ alias text node
86
+ end
87
+
88
+ class TkId < Token
89
+ def initialize(seek, line_no, char_no, name)
90
+ super(seek, line_no, char_no)
91
+ @name = name
92
+ end
93
+ attr :name
94
+
95
+ def ==(other)
96
+ self.class == other.class and
97
+ other.line_no == @line_no and
98
+ other.char_no == @char_no and
99
+ other.name == @name
100
+ end
101
+
102
+ def set_text text
103
+ @name = text
104
+ self
105
+ end
106
+
107
+ alias text name
108
+ end
109
+
110
+ class TkKW < TkId
111
+ end
112
+
113
+ class TkVal < Token
114
+ def initialize(seek, line_no, char_no, value = nil)
115
+ super(seek, line_no, char_no)
116
+ @value = value
117
+ end
118
+ attr_accessor :value
119
+
120
+ def ==(other)
121
+ self.class == other.class and
122
+ other.line_no == @line_no and
123
+ other.char_no == @char_no and
124
+ other.value == @value
125
+ end
126
+
127
+ def set_text text
128
+ @value = text
129
+ self
130
+ end
131
+
132
+ alias text value
133
+ end
134
+
135
+ class TkOp < Token
136
+ def initialize(seek, line_no, char_no, name = nil)
137
+ super seek, line_no, char_no
138
+ @name = name
139
+ end
140
+
141
+ attr_accessor :name
142
+
143
+ def ==(other)
144
+ self.class == other.class and
145
+ other.line_no == @line_no and
146
+ other.char_no == @char_no and
147
+ other.name == @name
148
+ end
149
+
150
+ def set_text text
151
+ @name = text
152
+ self
153
+ end
154
+
155
+ alias text name
156
+ end
157
+
158
+ class TkOPASGN < TkOp
159
+ def initialize(seek, line_no, char_no, op)
160
+ super(seek, line_no, char_no)
161
+ op = TkReading2Token[op][0] unless op.kind_of?(Symbol)
162
+ @op = op
163
+ @text = nil
164
+ end
165
+
166
+ attr :op
167
+
168
+ def ==(other)
169
+ self.class == other.class and
170
+ other.line_no == @line_no and
171
+ other.char_no == @char_no and
172
+ other.op == @op
173
+ end
174
+
175
+ def text
176
+ @text ||= "#{TkToken2Reading[op]}="
177
+ end
178
+ end
179
+
180
+ class TkUnknownChar < Token
181
+ def initialize(seek, line_no, char_no, id)
182
+ super(seek, line_no, char_no)
183
+ @name = name
184
+ end
185
+ attr :name
186
+
187
+ def ==(other)
188
+ self.class == other.class and
189
+ other.line_no == @line_no and
190
+ other.char_no == @char_no and
191
+ other.name == @name
192
+ end
193
+
194
+ def set_text text
195
+ @name = text
196
+ self
197
+ end
198
+
199
+ alias text name
200
+ end
201
+
202
+ class TkError < Token
203
+ end
204
+
205
+ def Token(token, value = nil)
206
+ value ||= TkToken2Reading[token]
207
+
208
+ case token
209
+ when String
210
+ if (tk = TkReading2Token[token]).nil?
211
+ IRB.fail TkReading2TokenNoKey, token
212
+ end
213
+
214
+ tk = Token(tk[0], value)
215
+
216
+ if tk.kind_of?(TkOp) then
217
+ tk.name = token
218
+ end
219
+ when Symbol
220
+ if (tk = TkSymbol2Token[token]).nil?
221
+ IRB.fail TkSymbol2TokenNoKey, token
222
+ end
223
+
224
+ tk = Token(tk[0], value)
225
+ else
226
+ if token.instance_method(:initialize).arity == 3 then
227
+ tk = token.new(@prev_seek, @prev_line_no, @prev_char_no)
228
+ tk.set_text value
229
+ else
230
+ tk = token.new(@prev_seek, @prev_line_no, @prev_char_no, value)
231
+ end
232
+ end
233
+
234
+ tk
235
+ end
236
+
237
+ TokenDefinitions = [
238
+ [:TkCLASS, TkKW, "class", EXPR_CLASS],
239
+ [:TkMODULE, TkKW, "module", EXPR_BEG],
240
+ [:TkDEF, TkKW, "def", EXPR_FNAME],
241
+ [:TkUNDEF, TkKW, "undef", EXPR_FNAME],
242
+ [:TkBEGIN, TkKW, "begin", EXPR_BEG],
243
+ [:TkRESCUE, TkKW, "rescue", EXPR_MID],
244
+ [:TkENSURE, TkKW, "ensure", EXPR_BEG],
245
+ [:TkEND, TkKW, "end", EXPR_END],
246
+ [:TkIF, TkKW, "if", EXPR_BEG, :TkIF_MOD],
247
+ [:TkUNLESS, TkKW, "unless", EXPR_BEG, :TkUNLESS_MOD],
248
+ [:TkTHEN, TkKW, "then", EXPR_BEG],
249
+ [:TkELSIF, TkKW, "elsif", EXPR_BEG],
250
+ [:TkELSE, TkKW, "else", EXPR_BEG],
251
+ [:TkCASE, TkKW, "case", EXPR_BEG],
252
+ [:TkWHEN, TkKW, "when", EXPR_BEG],
253
+ [:TkWHILE, TkKW, "while", EXPR_BEG, :TkWHILE_MOD],
254
+ [:TkUNTIL, TkKW, "until", EXPR_BEG, :TkUNTIL_MOD],
255
+ [:TkFOR, TkKW, "for", EXPR_BEG],
256
+ [:TkBREAK, TkKW, "break", EXPR_END],
257
+ [:TkNEXT, TkKW, "next", EXPR_END],
258
+ [:TkREDO, TkKW, "redo", EXPR_END],
259
+ [:TkRETRY, TkKW, "retry", EXPR_END],
260
+ [:TkIN, TkKW, "in", EXPR_BEG],
261
+ [:TkDO, TkKW, "do", EXPR_BEG],
262
+ [:TkRETURN, TkKW, "return", EXPR_MID],
263
+ [:TkYIELD, TkKW, "yield", EXPR_END],
264
+ [:TkSUPER, TkKW, "super", EXPR_END],
265
+ [:TkSELF, TkKW, "self", EXPR_END],
266
+ [:TkNIL, TkKW, "nil", EXPR_END],
267
+ [:TkTRUE, TkKW, "true", EXPR_END],
268
+ [:TkFALSE, TkKW, "false", EXPR_END],
269
+ [:TkAND, TkKW, "and", EXPR_BEG],
270
+ [:TkOR, TkKW, "or", EXPR_BEG],
271
+ [:TkNOT, TkKW, "not", EXPR_BEG],
272
+ [:TkIF_MOD, TkKW],
273
+ [:TkUNLESS_MOD, TkKW],
274
+ [:TkWHILE_MOD, TkKW],
275
+ [:TkUNTIL_MOD, TkKW],
276
+ [:TkALIAS, TkKW, "alias", EXPR_FNAME],
277
+ [:TkDEFINED, TkKW, "defined?", EXPR_END],
278
+ [:TklBEGIN, TkKW, "BEGIN", EXPR_END],
279
+ [:TklEND, TkKW, "END", EXPR_END],
280
+ [:Tk__LINE__, TkKW, "__LINE__", EXPR_END],
281
+ [:Tk__FILE__, TkKW, "__FILE__", EXPR_END],
282
+
283
+ [:TkIDENTIFIER, TkId],
284
+ [:TkFID, TkId],
285
+ [:TkGVAR, TkId],
286
+ [:TkCVAR, TkId],
287
+ [:TkIVAR, TkId],
288
+ [:TkCONSTANT, TkId],
289
+
290
+ [:TkINTEGER, TkVal],
291
+ [:TkFLOAT, TkVal],
292
+ [:TkSTRING, TkVal],
293
+ [:TkXSTRING, TkVal],
294
+ [:TkREGEXP, TkVal],
295
+ [:TkSYMBOL, TkVal],
296
+
297
+ [:TkDSTRING, TkNode],
298
+ [:TkDXSTRING, TkNode],
299
+ [:TkDREGEXP, TkNode],
300
+ [:TkNTH_REF, TkNode],
301
+ [:TkBACK_REF, TkNode],
302
+
303
+ [:TkUPLUS, TkOp, "+@"],
304
+ [:TkUMINUS, TkOp, "-@"],
305
+ [:TkPOW, TkOp, "**"],
306
+ [:TkCMP, TkOp, "<=>"],
307
+ [:TkEQ, TkOp, "=="],
308
+ [:TkEQQ, TkOp, "==="],
309
+ [:TkNEQ, TkOp, "!="],
310
+ [:TkGEQ, TkOp, ">="],
311
+ [:TkLEQ, TkOp, "<="],
312
+ [:TkANDOP, TkOp, "&&"],
313
+ [:TkOROP, TkOp, "||"],
314
+ [:TkMATCH, TkOp, "=~"],
315
+ [:TkNMATCH, TkOp, "!~"],
316
+ [:TkDOT2, TkOp, ".."],
317
+ [:TkDOT3, TkOp, "..."],
318
+ [:TkAREF, TkOp, "[]"],
319
+ [:TkASET, TkOp, "[]="],
320
+ [:TkLSHFT, TkOp, "<<"],
321
+ [:TkRSHFT, TkOp, ">>"],
322
+ [:TkCOLON2, TkOp, '::'],
323
+ [:TkCOLON3, TkOp, '::'],
324
+ #[:OPASGN, TkOp], # +=, -= etc. #
325
+ [:TkASSOC, TkOp, "=>"],
326
+ [:TkQUESTION, TkOp, "?"], #?
327
+ [:TkCOLON, TkOp, ":"], #:
328
+
329
+ [:TkfLPAREN, Token, "("], # func( #
330
+ [:TkfLBRACK, Token, "["], # func[ #
331
+ [:TkfLBRACE, Token, "{"], # func{ #
332
+ [:TkSTAR, Token, "*"], # *arg
333
+ [:TkAMPER, Token, "&"], # &arg #
334
+ [:TkSYMBEG, Token, ":"], # :SYMBOL
335
+
336
+ [:TkGT, TkOp, ">"],
337
+ [:TkLT, TkOp, "<"],
338
+ [:TkPLUS, TkOp, "+"],
339
+ [:TkMINUS, TkOp, "-"],
340
+ [:TkMULT, TkOp, "*"],
341
+ [:TkDIV, TkOp, "/"],
342
+ [:TkMOD, TkOp, "%"],
343
+ [:TkBITOR, TkOp, "|"],
344
+ [:TkBITXOR, TkOp, "^"],
345
+ [:TkBITAND, TkOp, "&"],
346
+ [:TkBITNOT, TkOp, "~"],
347
+ [:TkNOTOP, TkOp, "!"],
348
+
349
+ [:TkBACKQUOTE, TkOp, "`"],
350
+
351
+ [:TkASSIGN, Token, "="],
352
+ [:TkDOT, Token, "."],
353
+ [:TkLPAREN, Token, "("], #(exp)
354
+ [:TkLBRACK, Token, "["], #[arry]
355
+ [:TkLBRACE, Token, "{"], #{hash}
356
+ [:TkRPAREN, Token, ")"],
357
+ [:TkRBRACK, Token, "]"],
358
+ [:TkRBRACE, Token, "}"],
359
+ [:TkCOMMA, Token, ","],
360
+ [:TkSEMICOLON, Token, ";"],
361
+
362
+ [:TkCOMMENT, TkVal],
363
+ [:TkRD_COMMENT],
364
+ [:TkSPACE, Token, " "],
365
+ [:TkNL, Token, "\n"],
366
+ [:TkEND_OF_SCRIPT],
367
+
368
+ [:TkBACKSLASH, TkUnknownChar, "\\"],
369
+ [:TkAT, TkUnknownChar, "@"],
370
+ [:TkDOLLAR, TkUnknownChar, "$"],
371
+ ]
372
+
373
+ # {reading => token_class}
374
+ # {reading => [token_class, *opt]}
375
+ TkReading2Token = {}
376
+ TkToken2Reading = {}
377
+ TkSymbol2Token = {}
378
+
379
+ def self.def_token(token_n, super_token = Token, reading = nil, *opts)
380
+ token_n = token_n.id2name if token_n.kind_of?(Symbol)
381
+ if const_defined?(token_n)
382
+ IRB.fail AlreadyDefinedToken, token_n
383
+ end
384
+ token_c = eval("class #{token_n} < #{super_token}; end; #{token_n}")
385
+
386
+ if reading
387
+ TkToken2Reading[token_c] = reading
388
+
389
+ return if TkReading2Token[reading]
390
+
391
+ if opts.empty?
392
+ TkReading2Token[reading] = [token_c]
393
+ else
394
+ TkReading2Token[reading] = [token_c].concat(opts)
395
+ end
396
+ end
397
+ TkSymbol2Token[token_n.intern] = token_c
398
+ end
399
+
400
+ for defs in TokenDefinitions
401
+ def_token(*defs)
402
+ end
403
+
404
+ NEWLINE_TOKEN = TkNL.new nil, 0, 0, "\n"
405
+
406
+ class TkSYMBOL
407
+
408
+ def to_sym
409
+ @sym ||= text[1..-1].intern
410
+ end
411
+
412
+ end
413
+
414
+ # :startdoc:
415
+ end
416
+
@@ -4,5 +4,10 @@ require 'rdoc/class_module'
4
4
  # A singleton class
5
5
 
6
6
  class RDoc::SingleClass < RDoc::ClassModule
7
+
8
+ def ancestors
9
+ includes + [superclass]
10
+ end
11
+
7
12
  end
8
13
 
@@ -1,113 +1,177 @@
1
1
  require 'rdoc'
2
- require 'thread'
3
2
 
4
3
  ##
5
- # Simple stats collector
4
+ # RDoc stats collector
6
5
 
7
6
  class RDoc::Stats
8
7
 
9
- attr_reader :num_classes
8
+ attr_reader :nodoc_constants
9
+ attr_reader :nodoc_methods
10
+
11
+ attr_reader :num_constants
10
12
  attr_reader :num_files
11
13
  attr_reader :num_methods
12
- attr_reader :num_modules
14
+
13
15
  attr_reader :total_files
14
16
 
15
17
  def initialize(total_files, verbosity = 1)
16
- @lock = Mutex.new
17
-
18
- @num_classes = 0
19
- @num_files = 0
20
- @num_methods = 0
21
- @num_modules = 0
18
+ @nodoc_constants = 0
19
+ @nodoc_methods = 0
20
+
21
+ @num_constants = 0
22
+ @num_files = 0
23
+ @num_methods = 0
24
+
22
25
  @total_files = total_files
23
26
 
24
27
  @start = Time.now
25
28
 
26
29
  @display = case verbosity
27
- when 0 then Quiet.new
28
- when 1 then Normal.new(total_files)
29
- else Verbose.new
30
+ when 0 then Quiet.new total_files
31
+ when 1 then Normal.new total_files
32
+ else Verbose.new total_files
30
33
  end
31
34
  end
32
-
33
- def begin_adding(number_of_workers)
34
- @display.begin_adding(number_of_workers)
35
+
36
+ def begin_adding
37
+ @display.begin_adding
35
38
  end
36
39
 
37
40
  def add_alias(as)
38
- @lock.synchronize do
39
- @display.print_alias as
40
- @num_methods += 1
41
- end
41
+ @display.print_alias as
42
+ @num_methods += 1
43
+ @nodoc_methods += 1 if as.document_self and as.comment.empty?
42
44
  end
43
45
 
44
46
  def add_class(klass)
45
- @lock.synchronize do
46
- @display.print_class klass
47
- @num_classes += 1
48
- end
47
+ @display.print_class klass
48
+ end
49
+
50
+ def add_constant(constant)
51
+ @display.print_constant constant
52
+ @num_constants += 1
53
+ @nodoc_constants += 1 if constant.document_self and constant.comment.empty?
49
54
  end
50
55
 
51
56
  def add_file(file)
52
- @lock.synchronize do
53
- @display.print_file @num_files, file
54
- @num_files += 1
55
- end
57
+ @display.print_file @num_files, file
58
+ @num_files += 1
56
59
  end
57
60
 
58
61
  def add_method(method)
59
- @lock.synchronize do
60
- @display.print_method method
61
- @num_methods += 1
62
- end
62
+ @display.print_method method
63
+ @num_methods += 1
64
+ @nodoc_methods += 1 if method.document_self and method.comment.empty?
63
65
  end
64
66
 
65
67
  def add_module(mod)
66
- @lock.synchronize do
67
- @display.print_module mod
68
- @num_modules += 1
69
- end
68
+ @display.print_module mod
70
69
  end
71
-
70
+
72
71
  def done_adding
73
- @lock.synchronize do
74
- @display.done_adding
75
- end
72
+ @display.done_adding
76
73
  end
77
74
 
78
75
  def print
79
- puts "Files: #@num_files"
80
- puts "Classes: #@num_classes"
81
- puts "Modules: #@num_modules"
82
- puts "Methods: #@num_methods"
83
- puts "Elapsed: " + sprintf("%0.1fs", Time.now - @start)
76
+ classes = RDoc::TopLevel.classes
77
+ num_classes = classes.length
78
+ nodoc_classes = classes.select do |klass|
79
+ klass.document_self and klass.comment.empty?
80
+ end.length
81
+
82
+ modules = RDoc::TopLevel.modules
83
+ num_modules = modules.length
84
+ nodoc_modules = modules.select do |mod|
85
+ mod.document_self and mod.comment.empty?
86
+ end.length
87
+
88
+ items = num_classes + @num_constants + num_modules + @num_methods
89
+ doc_items = items -
90
+ nodoc_classes - @nodoc_constants - nodoc_modules - @nodoc_methods
91
+
92
+ percent_doc = doc_items.to_f / items * 100
93
+
94
+ puts "Files: %5d" % @num_files
95
+ puts "Classes: %5d (%5d undocumented)" % [num_classes, nodoc_classes]
96
+ puts "Constants: %5d (%5d undocumented)" %
97
+ [@num_constants, @nodoc_constants]
98
+ puts "Modules: %5d (%5d undocumented)" % [num_modules, nodoc_modules]
99
+ puts "Methods: %5d (%5d undocumented)" % [@num_methods, @nodoc_methods]
100
+ puts "%6.2f%% documented" % percent_doc
101
+ puts
102
+ puts "Elapsed: %0.1fs" % (Time.now - @start)
84
103
  end
85
104
 
105
+ ##
106
+ # Stats printer that prints nothing
107
+
86
108
  class Quiet
109
+
110
+ def initialize total_files
111
+ @total_files = total_files
112
+ end
113
+
114
+ ##
115
+ # Prints a message at the beginning of parsing
116
+
87
117
  def begin_adding(*) end
118
+
119
+ ##
120
+ # Prints when an alias is added
121
+
88
122
  def print_alias(*) end
123
+
124
+ ##
125
+ # Prints when a class is added
126
+
89
127
  def print_class(*) end
128
+
129
+ ##
130
+ # Prints when a constant is added
131
+
132
+ def print_constant(*) end
133
+
134
+ ##
135
+ # Prints when a file is added
136
+
90
137
  def print_file(*) end
138
+
139
+ ##
140
+ # Prints when a method is added
141
+
91
142
  def print_method(*) end
143
+
144
+ ##
145
+ # Prints when a module is added
146
+
92
147
  def print_module(*) end
148
+
149
+ ##
150
+ # Prints when RDoc is done
151
+
93
152
  def done_adding(*) end
153
+
94
154
  end
95
-
96
- class Normal
97
- def initialize(total_files)
98
- @total_files = total_files
99
- end
100
-
101
- def begin_adding(number_of_workers)
102
- puts "Parsing sources with #{number_of_workers} thread(s)..."
155
+
156
+ ##
157
+ # Stats printer that prints just the files being documented with a progress
158
+ # bar
159
+
160
+ class Normal < Quiet
161
+
162
+ def begin_adding # :nodoc:
163
+ puts "Parsing sources..."
103
164
  end
104
-
165
+
166
+ ##
167
+ # Prints a file with a progress bar
168
+
105
169
  def print_file(files_so_far, filename)
106
170
  progress_bar = sprintf("%3d%% [%2d/%2d] ",
107
171
  100 * (files_so_far + 1) / @total_files,
108
172
  files_so_far + 1,
109
173
  @total_files)
110
-
174
+
111
175
  if $stdout.tty?
112
176
  # Print a progress bar, but make sure it fits on a single line. Filename
113
177
  # will be truncated if necessary.
@@ -118,59 +182,64 @@ class RDoc::Stats
118
182
  filename = filename[(filename.size - max_filename_size) .. -1]
119
183
  filename[0..2] = "..."
120
184
  end
121
-
185
+
122
186
  # Pad the line with whitespaces so that leftover output from the
123
187
  # previous line doesn't show up.
124
188
  line = "#{progress_bar}#{filename}"
125
189
  padding = terminal_width - line.size
126
- if padding > 0
127
- line << (" " * padding)
128
- end
129
-
190
+ line << (" " * padding) if padding > 0
191
+
130
192
  $stdout.print("#{line}\r")
131
193
  $stdout.flush
132
194
  else
133
195
  puts "#{progress_bar} #{filename}"
134
196
  end
135
197
  end
136
-
137
- def done_adding
138
- puts "\n"
198
+
199
+ def done_adding # :nodoc:
200
+ puts
139
201
  end
140
202
 
141
- def print_alias(*) end
142
- def print_class(*) end
143
- def print_method(*) end
144
- def print_module(*) end
145
203
  end
146
204
 
147
- class Verbose
148
- def begin_adding(number_of_workers)
149
- puts "Parsing sources with #{number_of_workers} thread(s)..."
205
+ ##
206
+ # Stats printer that prints everything documented, including the documented
207
+ # status
208
+
209
+ class Verbose < Normal
210
+
211
+ ##
212
+ # Returns a marker for RDoc::CodeObject +co+ being undocumented
213
+
214
+ def nodoc co
215
+ " (undocumented)" unless co.documented?
150
216
  end
151
-
152
- def print_alias(as)
153
- puts "\t\talias #{as.new_name} #{as.old_name}"
217
+
218
+ def print_alias as # :nodoc:
219
+ puts "\t\talias #{as.new_name} #{as.old_name}#{nodoc as}"
154
220
  end
155
221
 
156
- def print_class(klass)
157
- puts "\tclass #{klass.full_name}"
222
+ def print_class(klass) # :nodoc:
223
+ puts "\tclass #{klass.full_name}#{nodoc klass}"
158
224
  end
159
225
 
160
- def print_file(files_so_far, file)
161
- puts file
226
+ def print_constant(constant) # :nodoc:
227
+ puts "\t\t#{constant.name}#{nodoc constant}"
162
228
  end
163
229
 
164
- def print_method(method)
165
- puts "\t\t#{method.singleton ? '::' : '#'}#{method.name}"
230
+ def print_file(files_so_far, file) # :nodoc:
231
+ super
232
+ puts
166
233
  end
167
234
 
168
- def print_module(mod)
169
- puts "\tmodule #{mod.full_name}"
235
+ def print_method(method) # :nodoc:
236
+ puts "\t\t#{method.singleton ? '::' : '#'}#{method.name}#{nodoc method}"
170
237
  end
171
-
172
- def done_adding
238
+
239
+ def print_module(mod) # :nodoc:
240
+ puts "\tmodule #{mod.full_name}#{nodoc mod}"
173
241
  end
242
+
174
243
  end
175
244
 
176
245
  end