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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +193 -0
- data/LEGAL.rdoc +6 -0
- data/LICENSE.rdoc +4 -0
- data/README.md +132 -8
- data/RI.md +75 -75
- data/doc/markup_reference/markdown.md +659 -0
- data/doc/markup_reference/rdoc.rdoc +1169 -0
- data/exe/rdoc +2 -2
- data/lib/rdoc/code_object/alias.rb +70 -74
- data/lib/rdoc/code_object/any_method.rb +308 -293
- data/lib/rdoc/code_object/attr.rb +150 -142
- data/lib/rdoc/code_object/class_module.rb +802 -715
- data/lib/rdoc/code_object/constant.rb +181 -144
- data/lib/rdoc/code_object/context/section.rb +140 -130
- data/lib/rdoc/code_object/context.rb +925 -941
- data/lib/rdoc/code_object/extend.rb +7 -5
- data/lib/rdoc/code_object/include.rb +7 -5
- data/lib/rdoc/code_object/method_attr.rb +328 -315
- data/lib/rdoc/code_object/mixin.rb +97 -92
- data/lib/rdoc/code_object/normal_class.rb +77 -78
- data/lib/rdoc/code_object/normal_module.rb +61 -59
- data/lib/rdoc/code_object/require.rb +23 -39
- data/lib/rdoc/code_object/single_class.rb +21 -19
- data/lib/rdoc/code_object/top_level.rb +215 -202
- data/lib/rdoc/code_object.rb +305 -305
- data/lib/rdoc/comment.rb +274 -337
- data/lib/rdoc/cross_reference.rb +195 -206
- data/lib/rdoc/encoding.rb +105 -103
- data/lib/rdoc/erb_partial.rb +13 -11
- data/lib/rdoc/erbio.rb +29 -27
- data/lib/rdoc/generator/aliki.rb +196 -30
- data/lib/rdoc/generator/darkfish.rb +647 -629
- data/lib/rdoc/generator/json_index.rb +233 -229
- data/lib/rdoc/generator/markup.rb +165 -122
- data/lib/rdoc/generator/pot/message_extractor.rb +57 -51
- data/lib/rdoc/generator/pot/po.rb +52 -51
- data/lib/rdoc/generator/pot/po_entry.rb +138 -132
- data/lib/rdoc/generator/pot.rb +85 -81
- data/lib/rdoc/generator/ri.rb +23 -19
- data/lib/rdoc/generator/template/aliki/DESIGN.md +538 -0
- data/lib/rdoc/generator/template/aliki/_aside_toc.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/_footer.rhtml +2 -2
- data/lib/rdoc/generator/template/aliki/_head.rhtml +15 -10
- data/lib/rdoc/generator/template/aliki/_header.rhtml +29 -44
- data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +8 -6
- data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +8 -6
- data/lib/rdoc/generator/template/aliki/_sidebar_installed.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +3 -3
- data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +3 -3
- data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/_sidebar_toggle.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/class.rhtml +71 -61
- data/lib/rdoc/generator/template/aliki/css/rdoc.css +796 -323
- data/lib/rdoc/generator/template/aliki/index.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/js/aliki.js +119 -113
- data/lib/rdoc/generator/template/aliki/js/bash_highlighter.js +167 -0
- data/lib/rdoc/generator/template/aliki/js/c_highlighter.js +1 -1
- data/lib/rdoc/generator/template/aliki/js/{search.js → search_controller.js} +16 -7
- 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/page.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/servlet_not_found.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/servlet_root.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +1 -1
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +8 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +8 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +1 -1
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +1 -1
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/class.rhtml +29 -32
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +19 -1
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +3 -3
- data/lib/rdoc/generator.rb +48 -46
- data/lib/rdoc/i18n/locale.rb +99 -95
- data/lib/rdoc/i18n/text.rb +109 -105
- data/lib/rdoc/i18n.rb +7 -5
- data/lib/rdoc/markdown/byte_runtime.rb +80 -0
- data/lib/rdoc/markdown.kpeg +52 -33
- data/lib/rdoc/markdown.rb +365 -177
- data/lib/rdoc/markup/blank_line.rb +25 -23
- data/lib/rdoc/markup/block_quote.rb +12 -8
- data/lib/rdoc/markup/document.rb +127 -123
- data/lib/rdoc/markup/element.rb +21 -0
- data/lib/rdoc/markup/formatter.rb +220 -203
- data/lib/rdoc/markup/hard_break.rb +30 -27
- data/lib/rdoc/markup/heading.rb +163 -77
- data/lib/rdoc/markup/include.rb +33 -29
- data/lib/rdoc/markup/indented_paragraph.rb +37 -33
- data/lib/rdoc/markup/inline_parser.rb +316 -0
- data/lib/rdoc/markup/list.rb +80 -88
- data/lib/rdoc/markup/list_item.rb +73 -85
- data/lib/rdoc/markup/paragraph.rb +23 -19
- data/lib/rdoc/markup/parser.rb +501 -497
- data/lib/rdoc/markup/pre_process.rb +284 -305
- data/lib/rdoc/markup/raw.rb +52 -55
- data/lib/rdoc/markup/rule.rb +16 -12
- data/lib/rdoc/markup/table.rb +48 -40
- data/lib/rdoc/markup/to_ansi.rb +143 -92
- data/lib/rdoc/markup/to_bs.rb +86 -102
- data/lib/rdoc/markup/to_html.rb +608 -506
- data/lib/rdoc/markup/to_html_crossref.rb +219 -210
- data/lib/rdoc/markup/to_html_snippet.rb +210 -205
- data/lib/rdoc/markup/to_joined_paragraph.rb +40 -41
- data/lib/rdoc/markup/to_label.rb +64 -51
- data/lib/rdoc/markup/to_markdown.rb +212 -184
- data/lib/rdoc/markup/to_rdoc.rb +341 -277
- data/lib/rdoc/markup/to_table_of_contents.rb +66 -62
- data/lib/rdoc/markup/to_test.rb +62 -50
- data/lib/rdoc/markup/to_tt_only.rb +83 -92
- data/lib/rdoc/markup/verbatim.rb +62 -58
- data/lib/rdoc/markup.rb +196 -215
- data/lib/rdoc/options.rb +1063 -1076
- data/lib/rdoc/parser/c.rb +1039 -1036
- data/lib/rdoc/parser/changelog.rb +320 -287
- data/lib/rdoc/parser/markdown.rb +17 -13
- data/lib/rdoc/parser/rbs.rb +279 -0
- data/lib/rdoc/parser/rd.rb +17 -13
- data/lib/rdoc/parser/ruby.rb +1231 -2222
- data/lib/rdoc/parser/ruby_colorizer.rb +303 -0
- data/lib/rdoc/parser/simple.rb +31 -27
- data/lib/rdoc/parser/text.rb +12 -8
- data/lib/rdoc/parser.rb +230 -221
- data/lib/rdoc/rbs_helper.rb +186 -0
- data/lib/rdoc/rd/inline.rb +57 -53
- data/lib/rdoc/rd.rb +90 -88
- data/lib/rdoc/rdoc.rb +547 -366
- data/lib/rdoc/ri/driver.rb +1141 -1130
- data/lib/rdoc/ri/formatter.rb +7 -3
- data/lib/rdoc/ri/paths.rb +140 -136
- data/lib/rdoc/ri/servlet.rb +456 -0
- data/lib/rdoc/ri/store.rb +4 -2
- data/lib/rdoc/ri/task.rb +55 -51
- data/lib/rdoc/ri.rb +14 -11
- data/lib/rdoc/rubygems_hook.rb +194 -192
- data/lib/rdoc/server.rb +462 -0
- data/lib/rdoc/stats/normal.rb +46 -42
- data/lib/rdoc/stats/quiet.rb +39 -35
- data/lib/rdoc/stats/verbose.rb +35 -31
- data/lib/rdoc/stats.rb +363 -338
- data/lib/rdoc/store.rb +919 -725
- data/lib/rdoc/task.rb +260 -255
- data/lib/rdoc/text.rb +164 -240
- data/lib/rdoc/token_stream.rb +88 -106
- data/lib/rdoc/tom_doc.rb +203 -201
- data/lib/rdoc/version.rb +1 -1
- data/lib/rdoc.rb +35 -7
- data/lib/rubygems_plugin.rb +2 -11
- data/rdoc-logo.svg +43 -0
- data/rdoc.gemspec +9 -7
- metadata +46 -32
- data/CONTRIBUTING.rdoc +0 -219
- data/ExampleMarkdown.md +0 -39
- data/ExampleRDoc.rdoc +0 -210
- data/lib/rdoc/code_object/anon_class.rb +0 -10
- data/lib/rdoc/code_object/ghost_method.rb +0 -6
- data/lib/rdoc/code_object/meta_method.rb +0 -6
- data/lib/rdoc/markdown/literals.kpeg +0 -21
- data/lib/rdoc/markdown/literals.rb +0 -454
- data/lib/rdoc/markup/attr_changer.rb +0 -22
- data/lib/rdoc/markup/attr_span.rb +0 -35
- data/lib/rdoc/markup/attribute_manager.rb +0 -405
- data/lib/rdoc/markup/attributes.rb +0 -70
- data/lib/rdoc/markup/regexp_handling.rb +0 -40
- data/lib/rdoc/parser/prism_ruby.rb +0 -1100
- data/lib/rdoc/parser/ripper_state_lex.rb +0 -302
- data/lib/rdoc/parser/ruby_tools.rb +0 -163
- data/lib/rdoc/servlet.rb +0 -452
|
@@ -1,186 +1,223 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
module RDoc
|
|
3
|
+
##
|
|
4
|
+
# A constant
|
|
4
5
|
|
|
5
|
-
class
|
|
6
|
+
class Constant < CodeObject
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
MARSHAL_VERSION = 0 # :nodoc:
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
##
|
|
11
|
+
# Sets the module or class this is constant is an alias for.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
attr_writer :is_alias_for
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
##
|
|
16
|
+
# The constant's name
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
attr_accessor :name
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
##
|
|
21
|
+
# The constant's value
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
attr_accessor :value
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
##
|
|
26
|
+
# The constant's visibility
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
attr_accessor :visibility
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
##
|
|
31
|
+
# The constant path on the RHS when the RHS is a bare constant reference
|
|
32
|
+
# (+Foo = Bar+ or +Foo = Bar::Baz+). Captured at parse time so
|
|
33
|
+
# #resolved_alias_target doesn't have to re-derive it from the textual
|
|
34
|
+
# #value. nil for other RHS shapes.
|
|
31
35
|
|
|
32
|
-
|
|
33
|
-
super()
|
|
36
|
+
attr_accessor :is_alias_for_path
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
##
|
|
39
|
+
# Creates a new constant with +name+, +value+ and +comment+
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
def initialize(name, value, comment)
|
|
42
|
+
super()
|
|
40
43
|
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
@name = name
|
|
45
|
+
@value = value
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
@is_alias_for = nil
|
|
48
|
+
@is_alias_for_path = nil
|
|
49
|
+
@visibility = :public
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
self.comment = comment
|
|
52
|
+
end
|
|
49
53
|
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
##
|
|
55
|
+
# Constants are ordered by name
|
|
52
56
|
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
def <=>(other)
|
|
58
|
+
return unless self.class === other
|
|
55
59
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
@parent == other.parent and
|
|
59
|
-
@name == other.name
|
|
60
|
-
end
|
|
60
|
+
[parent_name, name] <=> [other.parent_name, other.name]
|
|
61
|
+
end
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
|
63
|
+
##
|
|
64
|
+
# Constants are equal when their #parent and #name is the same
|
|
65
|
+
|
|
66
|
+
def ==(other)
|
|
67
|
+
self.class == other.class and
|
|
68
|
+
@parent == other.parent and
|
|
69
|
+
@name == other.name
|
|
74
70
|
end
|
|
75
|
-
@is_alias_for.documented?
|
|
76
|
-
end
|
|
77
71
|
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
##
|
|
73
|
+
# A constant is documented if it has a comment, or is an alias
|
|
74
|
+
# for a documented class or module.
|
|
75
|
+
|
|
76
|
+
def documented?
|
|
77
|
+
return true if super
|
|
78
|
+
return false unless @is_alias_for
|
|
79
|
+
case @is_alias_for
|
|
80
|
+
when String
|
|
81
|
+
found = @store.find_class_or_module @is_alias_for
|
|
82
|
+
return false unless found
|
|
83
|
+
@is_alias_for = found
|
|
84
|
+
end
|
|
85
|
+
@is_alias_for.documented?
|
|
86
|
+
end
|
|
80
87
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
end
|
|
88
|
+
##
|
|
89
|
+
# Full constant name including namespace
|
|
84
90
|
|
|
85
|
-
|
|
86
|
-
|
|
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
|
|
91
|
+
def full_name
|
|
92
|
+
@full_name ||= "#{parent_name}::#{@name}"
|
|
96
93
|
end
|
|
97
|
-
end
|
|
98
94
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
95
|
+
##
|
|
96
|
+
# The module or class this constant is an alias for, when one was recorded
|
|
97
|
+
# explicitly (by RDoc::Context#add_module_alias, RDoc::ClassModule#update_aliases,
|
|
98
|
+
# or ri marshal load). Pure accessor; see #resolved_alias_target for the
|
|
99
|
+
# opportunistic lookup path.
|
|
100
|
+
|
|
101
|
+
def is_alias_for
|
|
102
|
+
case @is_alias_for
|
|
103
|
+
when String
|
|
104
|
+
found = @store.find_class_or_module @is_alias_for
|
|
105
|
+
@is_alias_for = found if found
|
|
106
|
+
@is_alias_for
|
|
107
|
+
else
|
|
108
|
+
@is_alias_for
|
|
109
|
+
end
|
|
110
|
+
end
|
|
105
111
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
@
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
alias_name,
|
|
120
|
-
parse(@comment),
|
|
121
|
-
@file.relative_name,
|
|
122
|
-
parent.name,
|
|
123
|
-
parent.class,
|
|
124
|
-
section.title,
|
|
125
|
-
]
|
|
126
|
-
end
|
|
112
|
+
##
|
|
113
|
+
# Returns the class/module this constant *would* alias if #is_alias_for_path
|
|
114
|
+
# was set by the parser and that path resolves to a known class/module, or
|
|
115
|
+
# nil. Used to support `Const = RHS` parsed before `class RHS;end` is defined
|
|
116
|
+
# in another file. Pure lookup; does not mutate state. Honors :nodoc:
|
|
117
|
+
# (returns nil if document_self is false). Note that module nesting
|
|
118
|
+
# information is lost, so constant lookup is inaccurate.
|
|
119
|
+
|
|
120
|
+
def resolved_alias_target
|
|
121
|
+
return nil unless document_self
|
|
122
|
+
return nil unless @is_alias_for_path
|
|
123
|
+
parent.find_module_named(@is_alias_for_path)
|
|
124
|
+
end
|
|
127
125
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
def marshal_load(array)
|
|
136
|
-
initialize array[1], nil, RDoc::Comment.from_document(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
|
|
126
|
+
def inspect # :nodoc:
|
|
127
|
+
"#<%s:0x%x %s::%s>" % [
|
|
128
|
+
self.class, object_id,
|
|
129
|
+
parent_name, @name,
|
|
130
|
+
]
|
|
131
|
+
end
|
|
149
132
|
|
|
150
|
-
|
|
151
|
-
|
|
133
|
+
##
|
|
134
|
+
# Dumps this Constant for use by ri. See also #marshal_load
|
|
135
|
+
|
|
136
|
+
def marshal_dump
|
|
137
|
+
alias_name = case found = is_alias_for
|
|
138
|
+
when CodeObject then found.full_name
|
|
139
|
+
else found
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
[ MARSHAL_VERSION,
|
|
143
|
+
@name,
|
|
144
|
+
full_name,
|
|
145
|
+
@visibility,
|
|
146
|
+
alias_name,
|
|
147
|
+
parse(@comment),
|
|
148
|
+
@file.relative_name,
|
|
149
|
+
parent.name,
|
|
150
|
+
parent.class,
|
|
151
|
+
section.title,
|
|
152
|
+
]
|
|
153
|
+
end
|
|
152
154
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
##
|
|
156
|
+
# Loads this Constant from +array+. For a loaded Constant the following
|
|
157
|
+
# methods will return cached values:
|
|
158
|
+
#
|
|
159
|
+
# * #full_name
|
|
160
|
+
# * #parent_name
|
|
161
|
+
|
|
162
|
+
def marshal_load(array)
|
|
163
|
+
initialize array[1], nil, Comment.from_document(array[5])
|
|
164
|
+
|
|
165
|
+
@full_name = array[2]
|
|
166
|
+
@visibility = array[3] || :public
|
|
167
|
+
@is_alias_for = array[4]
|
|
168
|
+
# 5 handled above
|
|
169
|
+
# 6 handled below
|
|
170
|
+
@parent_name = array[7]
|
|
171
|
+
@parent_class = array[8]
|
|
172
|
+
@section_title = array[9]
|
|
173
|
+
|
|
174
|
+
@file = TopLevel.new array[6]
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
##
|
|
178
|
+
# Path to this constant for use with HTML generator output.
|
|
179
|
+
|
|
180
|
+
def path
|
|
181
|
+
"#{@parent.path}##{@name}"
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
##
|
|
185
|
+
# Returns an HTML snippet of the comment for search results.
|
|
186
|
+
|
|
187
|
+
def search_snippet
|
|
188
|
+
return '' if comment.empty?
|
|
156
189
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
190
|
+
snippet(comment)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def pretty_print(q) # :nodoc:
|
|
194
|
+
q.group 2, "[#{self.class.name} #{full_name}", "]" do
|
|
195
|
+
unless comment.empty?
|
|
196
|
+
q.breakable
|
|
197
|
+
q.text "comment:"
|
|
198
|
+
q.breakable
|
|
199
|
+
q.pp @comment
|
|
200
|
+
end
|
|
164
201
|
end
|
|
165
202
|
end
|
|
166
|
-
end
|
|
167
203
|
|
|
168
|
-
|
|
169
|
-
|
|
204
|
+
##
|
|
205
|
+
# Sets the store for this class or module and its contained code objects.
|
|
170
206
|
|
|
171
|
-
|
|
172
|
-
|
|
207
|
+
def store=(store)
|
|
208
|
+
super
|
|
173
209
|
|
|
174
|
-
|
|
175
|
-
|
|
210
|
+
@file = @store.add_file @file.full_name if @file
|
|
211
|
+
end
|
|
176
212
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
213
|
+
def to_s # :nodoc:
|
|
214
|
+
parent_name = parent ? parent.full_name : '(unknown)'
|
|
215
|
+
if is_alias_for
|
|
216
|
+
"constant #{parent_name}::#@name -> #{is_alias_for}"
|
|
217
|
+
else
|
|
218
|
+
"constant #{parent_name}::#@name"
|
|
219
|
+
end
|
|
183
220
|
end
|
|
184
|
-
end
|
|
185
221
|
|
|
222
|
+
end
|
|
186
223
|
end
|
|
@@ -2,175 +2,185 @@
|
|
|
2
2
|
require 'cgi/escape'
|
|
3
3
|
require 'cgi/util' unless defined?(CGI::EscapeExt)
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
5
|
+
module RDoc
|
|
6
|
+
class Context
|
|
7
|
+
##
|
|
8
|
+
# A section of documentation like:
|
|
9
|
+
#
|
|
10
|
+
# # :section: The title
|
|
11
|
+
# # The body
|
|
12
|
+
#
|
|
13
|
+
# Sections can be referenced multiple times and will be collapsed into a
|
|
14
|
+
# single section.
|
|
13
15
|
|
|
14
|
-
class
|
|
16
|
+
class Section
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
include Text
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
MARSHAL_VERSION = 0 # :nodoc:
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
##
|
|
23
|
+
# Section comments
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
attr_reader :comments
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
##
|
|
28
|
+
# Context this Section lives in
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
attr_reader :parent
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
##
|
|
33
|
+
# Section title
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
attr_reader :title
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
##
|
|
38
|
+
# The RDoc::Store for this object.
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
attr_reader :store
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
##
|
|
43
|
+
# Creates a new section with +title+ and +comment+
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
def initialize(parent, title, comment, store = nil)
|
|
46
|
+
@parent = parent
|
|
47
|
+
@title = title ? title.strip : title
|
|
48
|
+
@store = store
|
|
46
49
|
|
|
47
|
-
|
|
50
|
+
@comments = []
|
|
48
51
|
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
add_comment comment
|
|
53
|
+
end
|
|
51
54
|
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
##
|
|
56
|
+
# Sections are equal when they have the same #title
|
|
54
57
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
def ==(other)
|
|
59
|
+
self.class === other and @title == other.title
|
|
60
|
+
end
|
|
58
61
|
|
|
59
|
-
|
|
62
|
+
alias eql? ==
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
##
|
|
65
|
+
# Adds +comment+ to this section
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
def add_comment(comment)
|
|
68
|
+
Array(comment).each do |c|
|
|
69
|
+
next if c.nil?
|
|
70
|
+
raise TypeError, "unknown comment #{c.inspect}" unless Comment === c
|
|
71
|
+
@comments << c unless c.empty?
|
|
72
|
+
end
|
|
73
|
+
end
|
|
71
74
|
|
|
72
|
-
|
|
73
|
-
|
|
75
|
+
##
|
|
76
|
+
# Anchor reference for linking to this section using GitHub-style format.
|
|
77
|
+
#
|
|
78
|
+
# Examples:
|
|
79
|
+
# "Section" -> "section"
|
|
80
|
+
# "One Two" -> "one-two"
|
|
81
|
+
# "[untitled]" -> "untitled"
|
|
74
82
|
|
|
75
|
-
|
|
76
|
-
|
|
83
|
+
def aref
|
|
84
|
+
title = @title || '[untitled]'
|
|
77
85
|
|
|
78
|
-
|
|
79
|
-
|
|
86
|
+
Text.to_anchor(title)
|
|
87
|
+
end
|
|
80
88
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
# # The body
|
|
89
|
-
|
|
90
|
-
def extract_comment(comment)
|
|
91
|
-
case comment
|
|
92
|
-
when nil
|
|
93
|
-
RDoc::Comment.new ''
|
|
94
|
-
when RDoc::Comment then
|
|
95
|
-
if comment.text =~ /^#[ \t]*:section:.*\n/ then
|
|
96
|
-
start = $`
|
|
97
|
-
rest = $'
|
|
98
|
-
|
|
99
|
-
comment.text = if start.empty? then
|
|
100
|
-
rest
|
|
101
|
-
else
|
|
102
|
-
rest.sub(/#{start.chomp}\Z/, '')
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
comment
|
|
107
|
-
else
|
|
108
|
-
raise TypeError, "unknown comment #{comment.inspect}"
|
|
109
|
-
end
|
|
110
|
-
end
|
|
89
|
+
##
|
|
90
|
+
# Legacy anchor reference for backward compatibility.
|
|
91
|
+
#
|
|
92
|
+
# Examples:
|
|
93
|
+
# "Section" -> "section"
|
|
94
|
+
# "One Two" -> "one+two"
|
|
95
|
+
# "[untitled]" -> "5Buntitled-5D"
|
|
111
96
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
end
|
|
97
|
+
def legacy_aref
|
|
98
|
+
title = @title || '[untitled]'
|
|
115
99
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
end
|
|
100
|
+
CGI.escape(title).gsub('%', '-').sub(/^-/, '')
|
|
101
|
+
end
|
|
119
102
|
|
|
120
|
-
|
|
121
|
-
|
|
103
|
+
def inspect # :nodoc:
|
|
104
|
+
"#<%s:0x%x %p>" % [self.class, object_id, title]
|
|
105
|
+
end
|
|
122
106
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
107
|
+
def hash # :nodoc:
|
|
108
|
+
@title.hash
|
|
109
|
+
end
|
|
126
110
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
# the section parent which must be restored manually.
|
|
111
|
+
##
|
|
112
|
+
# The files comments in this section come from
|
|
130
113
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
@title,
|
|
135
|
-
parse,
|
|
136
|
-
]
|
|
137
|
-
end
|
|
114
|
+
def in_files
|
|
115
|
+
@comments.map(&:file)
|
|
116
|
+
end
|
|
138
117
|
|
|
139
|
-
|
|
140
|
-
|
|
118
|
+
##
|
|
119
|
+
# Serializes this Section. The title and parsed comment are saved, but not
|
|
120
|
+
# the section parent which must be restored manually.
|
|
141
121
|
|
|
142
|
-
|
|
143
|
-
|
|
122
|
+
def marshal_dump
|
|
123
|
+
[
|
|
124
|
+
MARSHAL_VERSION,
|
|
125
|
+
@title,
|
|
126
|
+
to_document,
|
|
127
|
+
]
|
|
128
|
+
end
|
|
144
129
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
end
|
|
130
|
+
##
|
|
131
|
+
# De-serializes this Section. The section parent must be restored manually.
|
|
148
132
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
# multiple RDoc::Markup::Documents with their file set.
|
|
133
|
+
def marshal_load(array)
|
|
134
|
+
@parent = nil
|
|
152
135
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
136
|
+
@title = array[1]
|
|
137
|
+
@comments = array[2].parts.map { |doc| Comment.from_document(doc) }
|
|
138
|
+
end
|
|
156
139
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
# This is used by the table of contents template so the name is silly.
|
|
140
|
+
##
|
|
141
|
+
# Parses +comment_location+ into an RDoc::Markup::Document composed of
|
|
142
|
+
# multiple RDoc::Markup::Documents with their file set.
|
|
161
143
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
144
|
+
def to_document
|
|
145
|
+
Markup::Document.new(*@comments.map(&:parse))
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
##
|
|
149
|
+
# The section's title, or 'Top Section' if the title is nil.
|
|
150
|
+
#
|
|
151
|
+
# This is used by the table of contents template so the name is silly.
|
|
165
152
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
153
|
+
def plain_html
|
|
154
|
+
@title || 'Top Section'
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
##
|
|
158
|
+
# Section comment
|
|
159
|
+
|
|
160
|
+
def comment
|
|
161
|
+
return nil if @comments.empty?
|
|
162
|
+
Comment.from_document(to_document)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def description
|
|
166
|
+
return '' if @comments.empty?
|
|
167
|
+
markup comment
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def language
|
|
171
|
+
@comments.first&.language
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
##
|
|
175
|
+
# Removes a comment from this section if it is from the same file as
|
|
176
|
+
# +comment+
|
|
177
|
+
|
|
178
|
+
def remove_comment(target_comment)
|
|
179
|
+
@comments.delete_if do |stored_comment|
|
|
180
|
+
stored_comment.file == target_comment.file
|
|
181
|
+
end
|
|
182
|
+
end
|
|
169
183
|
|
|
170
|
-
def remove_comment(target_comment)
|
|
171
|
-
@comments.delete_if do |stored_comment|
|
|
172
|
-
stored_comment.file == target_comment.file
|
|
173
184
|
end
|
|
174
185
|
end
|
|
175
|
-
|
|
176
186
|
end
|