rdoc 3.1 → 6.3.3

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 (247) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.rdoc +220 -0
  3. data/CVE-2013-0256.rdoc +49 -0
  4. data/ExampleMarkdown.md +37 -0
  5. data/ExampleRDoc.rdoc +208 -0
  6. data/Gemfile +12 -0
  7. data/History.rdoc +1666 -0
  8. data/LEGAL.rdoc +50 -0
  9. data/LICENSE.rdoc +57 -0
  10. data/README.rdoc +129 -0
  11. data/RI.rdoc +57 -0
  12. data/Rakefile +84 -81
  13. data/TODO.rdoc +59 -0
  14. data/bin/console +7 -0
  15. data/bin/setup +6 -0
  16. data/{bin → exe}/rdoc +11 -2
  17. data/exe/ri +12 -0
  18. data/lib/rdoc/alias.rb +1 -2
  19. data/lib/rdoc/anon_class.rb +3 -2
  20. data/lib/rdoc/any_method.rb +234 -40
  21. data/lib/rdoc/attr.rb +79 -11
  22. data/lib/rdoc/class_module.rb +443 -71
  23. data/lib/rdoc/code_object.rb +216 -20
  24. data/lib/rdoc/code_objects.rb +4 -21
  25. data/lib/rdoc/comment.rb +250 -0
  26. data/lib/rdoc/constant.rb +110 -9
  27. data/lib/rdoc/context/section.rb +232 -0
  28. data/lib/rdoc/context.rb +392 -172
  29. data/lib/rdoc/cross_reference.rb +202 -0
  30. data/lib/rdoc/encoding.rb +83 -28
  31. data/lib/rdoc/erb_partial.rb +19 -0
  32. data/lib/rdoc/erbio.rb +8 -3
  33. data/lib/rdoc/extend.rb +10 -0
  34. data/lib/rdoc/generator/darkfish.rb +507 -84
  35. data/lib/rdoc/generator/json_index.rb +300 -0
  36. data/lib/rdoc/generator/markup.rb +27 -74
  37. data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
  38. data/lib/rdoc/generator/pot/po.rb +84 -0
  39. data/lib/rdoc/generator/pot/po_entry.rb +141 -0
  40. data/lib/rdoc/generator/pot.rb +98 -0
  41. data/lib/rdoc/generator/ri.rb +8 -62
  42. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
  43. data/lib/rdoc/generator/template/darkfish/_head.rhtml +22 -0
  44. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +19 -0
  45. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +9 -0
  46. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +15 -0
  47. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +9 -0
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +15 -0
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +15 -0
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +12 -0
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +11 -0
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +12 -0
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +11 -0
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +14 -0
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +11 -0
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +18 -0
  57. data/lib/rdoc/generator/template/darkfish/class.rhtml +172 -0
  58. data/lib/rdoc/generator/template/darkfish/css/fonts.css +167 -0
  59. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +639 -0
  60. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf +0 -0
  61. data/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf +0 -0
  64. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  65. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  66. data/lib/rdoc/generator/template/darkfish/images/add.png +0 -0
  67. data/lib/rdoc/generator/template/darkfish/images/arrow_up.png +0 -0
  68. data/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
  69. data/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
  70. data/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
  71. data/lib/rdoc/generator/template/darkfish/index.rhtml +18 -60
  72. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -83
  73. data/lib/rdoc/generator/template/darkfish/js/search.js +110 -0
  74. data/lib/rdoc/generator/template/darkfish/page.rhtml +18 -0
  75. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +18 -0
  76. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +62 -0
  77. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +58 -0
  78. data/lib/rdoc/generator/template/json_index/.document +1 -0
  79. data/lib/rdoc/generator/template/json_index/js/navigation.js +105 -0
  80. data/lib/rdoc/generator/template/json_index/js/searcher.js +229 -0
  81. data/lib/rdoc/generator.rb +24 -13
  82. data/lib/rdoc/ghost_method.rb +1 -2
  83. data/lib/rdoc/i18n/locale.rb +102 -0
  84. data/lib/rdoc/i18n/text.rb +126 -0
  85. data/lib/rdoc/i18n.rb +10 -0
  86. data/lib/rdoc/include.rb +5 -95
  87. data/lib/rdoc/known_classes.rb +5 -2
  88. data/lib/rdoc/markdown/entities.rb +2132 -0
  89. data/lib/rdoc/markdown/literals.kpeg +23 -0
  90. data/lib/rdoc/markdown/literals.rb +416 -0
  91. data/lib/rdoc/markdown.kpeg +1237 -0
  92. data/lib/rdoc/markdown.rb +16684 -0
  93. data/lib/rdoc/markup/attr_changer.rb +23 -0
  94. data/lib/rdoc/markup/attr_span.rb +36 -0
  95. data/lib/rdoc/markup/attribute_manager.rb +135 -62
  96. data/lib/rdoc/markup/attributes.rb +71 -0
  97. data/lib/rdoc/markup/blank_line.rb +1 -0
  98. data/lib/rdoc/markup/block_quote.rb +15 -0
  99. data/lib/rdoc/markup/document.rb +96 -9
  100. data/lib/rdoc/markup/formatter.rb +138 -25
  101. data/lib/rdoc/markup/hard_break.rb +32 -0
  102. data/lib/rdoc/markup/heading.rb +61 -2
  103. data/lib/rdoc/markup/include.rb +43 -0
  104. data/lib/rdoc/markup/indented_paragraph.rb +48 -0
  105. data/lib/rdoc/markup/list.rb +25 -4
  106. data/lib/rdoc/markup/list_item.rb +18 -4
  107. data/lib/rdoc/markup/paragraph.rb +15 -0
  108. data/lib/rdoc/markup/parser.rb +180 -88
  109. data/lib/rdoc/markup/pre_process.rb +183 -38
  110. data/lib/rdoc/markup/raw.rb +6 -5
  111. data/lib/rdoc/markup/regexp_handling.rb +41 -0
  112. data/lib/rdoc/markup/rule.rb +1 -0
  113. data/lib/rdoc/markup/table.rb +47 -0
  114. data/lib/rdoc/markup/to_ansi.rb +17 -7
  115. data/lib/rdoc/markup/to_bs.rb +5 -8
  116. data/lib/rdoc/markup/to_html.rb +238 -137
  117. data/lib/rdoc/markup/to_html_crossref.rb +125 -152
  118. data/lib/rdoc/markup/to_html_snippet.rb +285 -0
  119. data/lib/rdoc/markup/to_joined_paragraph.rb +47 -0
  120. data/lib/rdoc/markup/to_label.rb +75 -0
  121. data/lib/rdoc/markup/to_markdown.rb +192 -0
  122. data/lib/rdoc/markup/to_rdoc.rb +85 -15
  123. data/lib/rdoc/markup/to_table_of_contents.rb +89 -0
  124. data/lib/rdoc/markup/to_test.rb +2 -4
  125. data/lib/rdoc/markup/to_tt_only.rb +121 -0
  126. data/lib/rdoc/markup/verbatim.rb +39 -0
  127. data/lib/rdoc/markup.rb +388 -110
  128. data/lib/rdoc/meta_method.rb +1 -2
  129. data/lib/rdoc/method_attr.rb +87 -21
  130. data/lib/rdoc/mixin.rb +121 -0
  131. data/lib/rdoc/normal_class.rb +39 -10
  132. data/lib/rdoc/normal_module.rb +22 -7
  133. data/lib/rdoc/options.rb +613 -73
  134. data/lib/rdoc/parser/c.rb +621 -287
  135. data/lib/rdoc/parser/changelog.rb +335 -0
  136. data/lib/rdoc/parser/markdown.rb +24 -0
  137. data/lib/rdoc/parser/rd.rb +23 -0
  138. data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
  139. data/lib/rdoc/parser/ruby.rb +1368 -762
  140. data/lib/rdoc/parser/ruby_tools.rb +42 -35
  141. data/lib/rdoc/parser/simple.rb +23 -11
  142. data/lib/rdoc/parser/text.rb +12 -0
  143. data/lib/rdoc/parser.rb +162 -89
  144. data/lib/rdoc/rd/block_parser.rb +1056 -0
  145. data/lib/rdoc/rd/block_parser.ry +639 -0
  146. data/lib/rdoc/rd/inline.rb +72 -0
  147. data/lib/rdoc/rd/inline_parser.rb +1208 -0
  148. data/lib/rdoc/rd/inline_parser.ry +593 -0
  149. data/lib/rdoc/rd.rb +100 -0
  150. data/lib/rdoc/rdoc.rb +208 -115
  151. data/lib/rdoc/require.rb +1 -2
  152. data/lib/rdoc/ri/driver.rb +734 -239
  153. data/lib/rdoc/ri/formatter.rb +1 -0
  154. data/lib/rdoc/ri/paths.rb +91 -48
  155. data/lib/rdoc/ri/store.rb +3 -261
  156. data/lib/rdoc/ri/task.rb +71 -0
  157. data/lib/rdoc/ri.rb +5 -2
  158. data/lib/rdoc/rubygems_hook.rb +246 -0
  159. data/lib/rdoc/servlet.rb +451 -0
  160. data/lib/rdoc/single_class.rb +14 -2
  161. data/lib/rdoc/stats/normal.rb +19 -12
  162. data/lib/rdoc/stats/quiet.rb +1 -0
  163. data/lib/rdoc/stats/verbose.rb +1 -0
  164. data/lib/rdoc/stats.rb +262 -104
  165. data/lib/rdoc/store.rb +979 -0
  166. data/lib/rdoc/task.rb +84 -44
  167. data/lib/rdoc/text.rb +117 -72
  168. data/lib/rdoc/token_stream.rb +73 -4
  169. data/lib/rdoc/tom_doc.rb +263 -0
  170. data/lib/rdoc/top_level.rb +111 -261
  171. data/lib/rdoc/version.rb +8 -0
  172. data/lib/rdoc.rb +127 -64
  173. data/man/ri.1 +247 -0
  174. data/rdoc.gemspec +249 -0
  175. metadata +171 -291
  176. data/.autotest +0 -16
  177. data/.document +0 -5
  178. data/History.txt +0 -594
  179. data/LICENSE.txt +0 -57
  180. data/Manifest.txt +0 -158
  181. data/README.txt +0 -45
  182. data/RI.txt +0 -58
  183. data/bin/ri +0 -5
  184. data/lib/rdoc/gauntlet.rb +0 -52
  185. data/lib/rdoc/generator/template/darkfish/classpage.rhtml +0 -296
  186. data/lib/rdoc/generator/template/darkfish/filepage.rhtml +0 -124
  187. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -32
  188. data/lib/rdoc/generator/template/darkfish/js/quicksearch.js +0 -114
  189. data/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js +0 -10
  190. data/lib/rdoc/generator/template/darkfish/rdoc.css +0 -706
  191. data/lib/rdoc/markup/formatter_test_case.rb +0 -689
  192. data/lib/rdoc/markup/inline.rb +0 -137
  193. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -116
  194. data/lib/rdoc/ruby_lex.rb +0 -1291
  195. data/lib/rdoc/ruby_token.rb +0 -416
  196. data/test/README +0 -1
  197. data/test/binary.dat +0 -0
  198. data/test/hidden.zip.txt +0 -1
  199. data/test/test.ja.rdoc +0 -10
  200. data/test/test.ja.txt +0 -8
  201. data/test/test.txt +0 -1
  202. data/test/test_attribute_manager.rb +0 -120
  203. data/test/test_rdoc_alias.rb +0 -13
  204. data/test/test_rdoc_any_method.rb +0 -126
  205. data/test/test_rdoc_attr.rb +0 -61
  206. data/test/test_rdoc_class_module.rb +0 -233
  207. data/test/test_rdoc_code_object.rb +0 -165
  208. data/test/test_rdoc_constant.rb +0 -15
  209. data/test/test_rdoc_context.rb +0 -370
  210. data/test/test_rdoc_encoding.rb +0 -166
  211. data/test/test_rdoc_generator_darkfish.rb +0 -119
  212. data/test/test_rdoc_generator_ri.rb +0 -76
  213. data/test/test_rdoc_include.rb +0 -96
  214. data/test/test_rdoc_markup.rb +0 -37
  215. data/test/test_rdoc_markup_attribute_manager.rb +0 -240
  216. data/test/test_rdoc_markup_document.rb +0 -51
  217. data/test/test_rdoc_markup_paragraph.rb +0 -9
  218. data/test/test_rdoc_markup_parser.rb +0 -1395
  219. data/test/test_rdoc_markup_pre_process.rb +0 -185
  220. data/test/test_rdoc_markup_raw.rb +0 -27
  221. data/test/test_rdoc_markup_to_ansi.rb +0 -328
  222. data/test/test_rdoc_markup_to_bs.rb +0 -341
  223. data/test/test_rdoc_markup_to_html.rb +0 -335
  224. data/test/test_rdoc_markup_to_html_crossref.rb +0 -169
  225. data/test/test_rdoc_markup_to_rdoc.rb +0 -327
  226. data/test/test_rdoc_method_attr.rb +0 -122
  227. data/test/test_rdoc_normal_class.rb +0 -17
  228. data/test/test_rdoc_normal_module.rb +0 -31
  229. data/test/test_rdoc_options.rb +0 -342
  230. data/test/test_rdoc_parser.rb +0 -83
  231. data/test/test_rdoc_parser_c.rb +0 -912
  232. data/test/test_rdoc_parser_ruby.rb +0 -1754
  233. data/test/test_rdoc_parser_simple.rb +0 -99
  234. data/test/test_rdoc_rdoc.rb +0 -164
  235. data/test/test_rdoc_require.rb +0 -25
  236. data/test/test_rdoc_ri_driver.rb +0 -846
  237. data/test/test_rdoc_ri_paths.rb +0 -43
  238. data/test/test_rdoc_ri_store.rb +0 -352
  239. data/test/test_rdoc_ruby_lex.rb +0 -23
  240. data/test/test_rdoc_stats.rb +0 -38
  241. data/test/test_rdoc_task.rb +0 -92
  242. data/test/test_rdoc_text.rb +0 -251
  243. data/test/test_rdoc_top_level.rb +0 -120
  244. data/test/xref_data.rb +0 -62
  245. data/test/xref_test_case.rb +0 -61
  246. data.tar.gz.sig +0 -3
  247. metadata.gz.sig +0 -0
data/lib/rdoc/constant.rb CHANGED
@@ -1,16 +1,15 @@
1
- require 'rdoc/code_object'
2
-
1
+ # frozen_string_literal: true
3
2
  ##
4
3
  # A constant
5
4
 
6
5
  class RDoc::Constant < RDoc::CodeObject
7
6
 
7
+ MARSHAL_VERSION = 0 # :nodoc:
8
+
8
9
  ##
9
- # If this constant is an alias for a module or class,
10
- # this is the RDoc::ClassModule it is an alias for.
11
- # +nil+ otherwise.
10
+ # Sets the module or class this is constant is an alias for.
12
11
 
13
- attr_accessor :is_alias_for
12
+ attr_writer :is_alias_for
14
13
 
15
14
  ##
16
15
  # The constant's name
@@ -22,14 +21,23 @@ class RDoc::Constant < RDoc::CodeObject
22
21
 
23
22
  attr_accessor :value
24
23
 
24
+ ##
25
+ # The constant's visibility
26
+
27
+ attr_accessor :visibility
28
+
25
29
  ##
26
30
  # Creates a new constant with +name+, +value+ and +comment+
27
31
 
28
32
  def initialize(name, value, comment)
29
33
  super()
30
- @name = name
34
+
35
+ @name = name
31
36
  @value = value
37
+
32
38
  @is_alias_for = nil
39
+ @visibility = :public
40
+
33
41
  self.comment = comment
34
42
  end
35
43
 
@@ -56,7 +64,36 @@ class RDoc::Constant < RDoc::CodeObject
56
64
  # for a documented class or module.
57
65
 
58
66
  def documented?
59
- super or is_alias_for && is_alias_for.documented?
67
+ return true if super
68
+ return false unless @is_alias_for
69
+ case @is_alias_for
70
+ when String then
71
+ found = @store.find_class_or_module @is_alias_for
72
+ return false unless found
73
+ @is_alias_for = found
74
+ end
75
+ @is_alias_for.documented?
76
+ end
77
+
78
+ ##
79
+ # Full constant name including namespace
80
+
81
+ def full_name
82
+ @full_name ||= "#{parent_name}::#{@name}"
83
+ end
84
+
85
+ ##
86
+ # The module or class this constant is an alias for
87
+
88
+ def is_alias_for
89
+ case @is_alias_for
90
+ when String then
91
+ found = @store.find_class_or_module @is_alias_for
92
+ @is_alias_for = found if found
93
+ @is_alias_for
94
+ else
95
+ @is_alias_for
96
+ end
60
97
  end
61
98
 
62
99
  def inspect # :nodoc:
@@ -67,12 +104,76 @@ class RDoc::Constant < RDoc::CodeObject
67
104
  end
68
105
 
69
106
  ##
70
- # Path to this constant
107
+ # Dumps this Constant for use by ri. See also #marshal_load
108
+
109
+ def marshal_dump
110
+ alias_name = case found = is_alias_for
111
+ when RDoc::CodeObject then found.full_name
112
+ else found
113
+ end
114
+
115
+ [ MARSHAL_VERSION,
116
+ @name,
117
+ full_name,
118
+ @visibility,
119
+ alias_name,
120
+ parse(@comment),
121
+ @file.relative_name,
122
+ parent.name,
123
+ parent.class,
124
+ section.title,
125
+ ]
126
+ end
127
+
128
+ ##
129
+ # Loads this Constant from +array+. For a loaded Constant the following
130
+ # methods will return cached values:
131
+ #
132
+ # * #full_name
133
+ # * #parent_name
134
+
135
+ def marshal_load array
136
+ initialize array[1], nil, array[5]
137
+
138
+ @full_name = array[2]
139
+ @visibility = array[3] || :public
140
+ @is_alias_for = array[4]
141
+ # 5 handled above
142
+ # 6 handled below
143
+ @parent_name = array[7]
144
+ @parent_class = array[8]
145
+ @section_title = array[9]
146
+
147
+ @file = RDoc::TopLevel.new array[6]
148
+ end
149
+
150
+ ##
151
+ # Path to this constant for use with HTML generator output.
71
152
 
72
153
  def path
73
154
  "#{@parent.path}##{@name}"
74
155
  end
75
156
 
157
+ def pretty_print q # :nodoc:
158
+ q.group 2, "[#{self.class.name} #{full_name}", "]" do
159
+ unless comment.empty? then
160
+ q.breakable
161
+ q.text "comment:"
162
+ q.breakable
163
+ q.pp @comment
164
+ end
165
+ end
166
+ end
167
+
168
+ ##
169
+ # Sets the store for this class or module and its contained code objects.
170
+
171
+ def store= store
172
+ super
173
+
174
+ @file = @store.add_file @file.full_name if @file
175
+ end
176
+
76
177
  def to_s # :nodoc:
77
178
  parent_name = parent ? parent.full_name : '(unknown)'
78
179
  if is_alias_for
@@ -0,0 +1,232 @@
1
+ # frozen_string_literal: true
2
+ ##
3
+ # A section of documentation like:
4
+ #
5
+ # # :section: The title
6
+ # # The body
7
+ #
8
+ # Sections can be referenced multiple times and will be collapsed into a
9
+ # single section.
10
+
11
+ class RDoc::Context::Section
12
+
13
+ include RDoc::Text
14
+
15
+ MARSHAL_VERSION = 0 # :nodoc:
16
+
17
+ ##
18
+ # Section comment
19
+
20
+ attr_reader :comment
21
+
22
+ ##
23
+ # Section comments
24
+
25
+ attr_reader :comments
26
+
27
+ ##
28
+ # Context this Section lives in
29
+
30
+ attr_reader :parent
31
+
32
+ ##
33
+ # Section title
34
+
35
+ attr_reader :title
36
+
37
+ ##
38
+ # Creates a new section with +title+ and +comment+
39
+
40
+ def initialize parent, title, comment
41
+ @parent = parent
42
+ @title = title ? title.strip : title
43
+
44
+ @comments = []
45
+
46
+ add_comment comment
47
+ end
48
+
49
+ ##
50
+ # Sections are equal when they have the same #title
51
+
52
+ def == other
53
+ self.class === other and @title == other.title
54
+ end
55
+
56
+ alias eql? ==
57
+
58
+ ##
59
+ # Adds +comment+ to this section
60
+
61
+ def add_comment comment
62
+ comment = extract_comment comment
63
+
64
+ return if comment.empty?
65
+
66
+ case comment
67
+ when RDoc::Comment then
68
+ @comments << comment
69
+ when RDoc::Markup::Document then
70
+ @comments.concat comment.parts
71
+ when Array then
72
+ @comments.concat comment
73
+ else
74
+ raise TypeError, "unknown comment type: #{comment.inspect}"
75
+ end
76
+ end
77
+
78
+ ##
79
+ # Anchor reference for linking to this section
80
+
81
+ def aref
82
+ title = @title || '[untitled]'
83
+
84
+ CGI.escape(title).gsub('%', '-').sub(/^-/, '')
85
+ end
86
+
87
+ ##
88
+ # Extracts the comment for this section from the original comment block.
89
+ # If the first line contains :section:, strip it and use the rest.
90
+ # Otherwise remove lines up to the line containing :section:, and look
91
+ # for those lines again at the end and remove them. This lets us write
92
+ #
93
+ # # :section: The title
94
+ # # The body
95
+
96
+ def extract_comment comment
97
+ case comment
98
+ when Array then
99
+ comment.map do |c|
100
+ extract_comment c
101
+ end
102
+ when nil
103
+ RDoc::Comment.new ''
104
+ when RDoc::Comment then
105
+ if comment.text =~ /^#[ \t]*:section:.*\n/ then
106
+ start = $`
107
+ rest = $'
108
+
109
+ comment.text = if start.empty? then
110
+ rest
111
+ else
112
+ rest.sub(/#{start.chomp}\Z/, '')
113
+ end
114
+ end
115
+
116
+ comment
117
+ when RDoc::Markup::Document then
118
+ comment
119
+ else
120
+ raise TypeError, "unknown comment #{comment.inspect}"
121
+ end
122
+ end
123
+
124
+ def inspect # :nodoc:
125
+ "#<%s:0x%x %p>" % [self.class, object_id, title]
126
+ end
127
+
128
+ def hash # :nodoc:
129
+ @title.hash
130
+ end
131
+
132
+ ##
133
+ # The files comments in this section come from
134
+
135
+ def in_files
136
+ return [] if @comments.empty?
137
+
138
+ case @comments
139
+ when Array then
140
+ @comments.map do |comment|
141
+ comment.file
142
+ end
143
+ when RDoc::Markup::Document then
144
+ @comment.parts.map do |document|
145
+ document.file
146
+ end
147
+ else
148
+ raise RDoc::Error, "BUG: unknown comment class #{@comments.class}"
149
+ end
150
+ end
151
+
152
+ ##
153
+ # Serializes this Section. The title and parsed comment are saved, but not
154
+ # the section parent which must be restored manually.
155
+
156
+ def marshal_dump
157
+ [
158
+ MARSHAL_VERSION,
159
+ @title,
160
+ parse,
161
+ ]
162
+ end
163
+
164
+ ##
165
+ # De-serializes this Section. The section parent must be restored manually.
166
+
167
+ def marshal_load array
168
+ @parent = nil
169
+
170
+ @title = array[1]
171
+ @comments = array[2]
172
+ end
173
+
174
+ ##
175
+ # Parses +comment_location+ into an RDoc::Markup::Document composed of
176
+ # multiple RDoc::Markup::Documents with their file set.
177
+
178
+ def parse
179
+ case @comments
180
+ when String then
181
+ super
182
+ when Array then
183
+ docs = @comments.map do |comment, location|
184
+ doc = super comment
185
+ doc.file = location if location
186
+ doc
187
+ end
188
+
189
+ RDoc::Markup::Document.new(*docs)
190
+ when RDoc::Comment then
191
+ doc = super @comments.text, comments.format
192
+ doc.file = @comments.location
193
+ doc
194
+ when RDoc::Markup::Document then
195
+ return @comments
196
+ else
197
+ raise ArgumentError, "unknown comment class #{comments.class}"
198
+ end
199
+ end
200
+
201
+ ##
202
+ # The section's title, or 'Top Section' if the title is nil.
203
+ #
204
+ # This is used by the table of contents template so the name is silly.
205
+
206
+ def plain_html
207
+ @title || 'Top Section'
208
+ end
209
+
210
+ ##
211
+ # Removes a comment from this section if it is from the same file as
212
+ # +comment+
213
+
214
+ def remove_comment comment
215
+ return if @comments.empty?
216
+
217
+ case @comments
218
+ when Array then
219
+ @comments.delete_if do |my_comment|
220
+ my_comment.file == comment.file
221
+ end
222
+ when RDoc::Markup::Document then
223
+ @comments.parts.delete_if do |document|
224
+ document.file == comment.file.name
225
+ end
226
+ else
227
+ raise RDoc::Error, "BUG: unknown comment class #{@comments.class}"
228
+ end
229
+ end
230
+
231
+ end
232
+