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
data/lib/rdoc/markup/to_rdoc.rb
CHANGED
|
@@ -1,361 +1,425 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
module RDoc
|
|
3
|
+
class Markup
|
|
4
|
+
##
|
|
5
|
+
# Outputs RDoc markup as RDoc markup! (mostly)
|
|
4
6
|
|
|
5
|
-
class
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
class ToRdoc < Markup::Formatter
|
|
8
|
+
DEFAULT_HEADINGS = {
|
|
9
|
+
1 => ['= ', ''],
|
|
10
|
+
2 => ['== ', ''],
|
|
11
|
+
3 => ['=== ', ''],
|
|
12
|
+
4 => ['==== ', ''],
|
|
13
|
+
5 => ['===== ', ''],
|
|
14
|
+
6 => ['====== ', '']
|
|
15
|
+
}
|
|
16
|
+
DEFAULT_HEADINGS.default = []
|
|
17
|
+
DEFAULT_HEADINGS.freeze
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
##
|
|
20
|
+
# Current indent amount for output in characters
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
attr_accessor :indent
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
##
|
|
25
|
+
# Output width in characters
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
attr_accessor :width
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
##
|
|
30
|
+
# Stack of current list indexes for alphabetic and numeric lists
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
attr_reader :list_index
|
|
31
33
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
##
|
|
35
|
+
# Stack of list types
|
|
34
36
|
|
|
35
|
-
|
|
37
|
+
attr_reader :list_type
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
##
|
|
40
|
+
# Stack of list widths for indentation
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
attr_reader :list_width
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
##
|
|
45
|
+
# Prefix for the next list item. See #use_prefix
|
|
44
46
|
|
|
45
|
-
|
|
47
|
+
attr_reader :prefix
|
|
46
48
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
##
|
|
50
|
+
# Output accumulator
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
attr_reader :res
|
|
51
53
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
##
|
|
55
|
+
# Creates a new formatter that will output (mostly) \RDoc markup
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
def initialize
|
|
58
|
+
super
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
init_tags
|
|
60
|
+
@markup.add_regexp_handling(/\\\S/, :SUPPRESSED_CROSSREF)
|
|
61
|
+
@width = 78
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
@headings = DEFAULT_HEADINGS.dup
|
|
64
|
+
@hard_break = "\n"
|
|
65
|
+
end
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
##
|
|
68
|
+
# Adds +blank_line+ to the output
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
add_tag :EM, "<em>", "</em>"
|
|
73
|
-
end
|
|
70
|
+
def accept_blank_line(blank_line)
|
|
71
|
+
@res << "\n"
|
|
72
|
+
end
|
|
74
73
|
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
##
|
|
75
|
+
# Adds +paragraph+ to the output
|
|
77
76
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
end
|
|
77
|
+
def accept_block_quote(block_quote)
|
|
78
|
+
@indent += 2
|
|
81
79
|
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
block_quote.parts.each do |part|
|
|
81
|
+
@prefix = '> '
|
|
84
82
|
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
part.accept self
|
|
84
|
+
end
|
|
87
85
|
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
@indent -= 2
|
|
87
|
+
end
|
|
90
88
|
|
|
91
|
-
|
|
92
|
-
|
|
89
|
+
##
|
|
90
|
+
# Adds +heading+ to the output
|
|
93
91
|
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
def accept_heading(heading)
|
|
93
|
+
use_prefix or @res << ' ' * @indent
|
|
94
|
+
@res << @headings[heading.level][0]
|
|
95
|
+
@res << attributes(heading.text)
|
|
96
|
+
@res << @headings[heading.level][1]
|
|
97
|
+
@res << "\n"
|
|
98
|
+
end
|
|
96
99
|
|
|
97
|
-
|
|
98
|
-
|
|
100
|
+
##
|
|
101
|
+
# Finishes consumption of +list+
|
|
99
102
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
@res << "\n"
|
|
106
|
-
end
|
|
103
|
+
def accept_list_end(list)
|
|
104
|
+
@list_index.pop
|
|
105
|
+
@list_type.pop
|
|
106
|
+
@list_width.pop
|
|
107
|
+
end
|
|
107
108
|
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
##
|
|
110
|
+
# Finishes consumption of +list_item+
|
|
111
|
+
|
|
112
|
+
def accept_list_item_end(list_item)
|
|
113
|
+
width = case @list_type.last
|
|
114
|
+
when :BULLET
|
|
115
|
+
2
|
|
116
|
+
when :NOTE, :LABEL
|
|
117
|
+
if @prefix
|
|
118
|
+
@res << @prefix.strip
|
|
119
|
+
@prefix = nil
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
@res << "\n"
|
|
123
|
+
2
|
|
124
|
+
else
|
|
125
|
+
bullet = @list_index.last.to_s
|
|
126
|
+
@list_index[-1] = @list_index.last.succ
|
|
127
|
+
bullet.length + 2
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
@indent -= width
|
|
131
|
+
end
|
|
110
132
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
133
|
+
##
|
|
134
|
+
# Prepares the visitor for consuming +list_item+
|
|
135
|
+
|
|
136
|
+
def accept_list_item_start(list_item)
|
|
137
|
+
type = @list_type.last
|
|
138
|
+
|
|
139
|
+
case type
|
|
140
|
+
when :NOTE, :LABEL
|
|
141
|
+
stripped_labels = Array(list_item.label).map do |label|
|
|
142
|
+
attributes(label).strip
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
bullets = case type
|
|
146
|
+
when :NOTE
|
|
147
|
+
stripped_labels.map { |b| "#{b}::" }
|
|
148
|
+
when :LABEL
|
|
149
|
+
stripped_labels.map { |b| "[#{b}]" }
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
bullets = bullets.join("\n")
|
|
153
|
+
bullets << "\n" unless stripped_labels.empty?
|
|
154
|
+
|
|
155
|
+
@prefix = ' ' * @indent
|
|
156
|
+
@indent += 2
|
|
157
|
+
@prefix << bullets + (' ' * @indent)
|
|
158
|
+
else
|
|
159
|
+
bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
|
|
160
|
+
@prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
|
|
161
|
+
width = bullet.length + 1
|
|
162
|
+
@indent += width
|
|
163
|
+
end
|
|
164
|
+
end
|
|
116
165
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
166
|
+
##
|
|
167
|
+
# Prepares the visitor for consuming +list+
|
|
168
|
+
|
|
169
|
+
def accept_list_start(list)
|
|
170
|
+
case list.type
|
|
171
|
+
when :BULLET
|
|
172
|
+
@list_index << nil
|
|
173
|
+
@list_width << 1
|
|
174
|
+
when :LABEL, :NOTE
|
|
175
|
+
@list_index << nil
|
|
176
|
+
@list_width << 2
|
|
177
|
+
when :LALPHA
|
|
178
|
+
@list_index << 'a'
|
|
179
|
+
@list_width << list.items.length.to_s.length
|
|
180
|
+
when :NUMBER
|
|
181
|
+
@list_index << 1
|
|
182
|
+
@list_width << list.items.length.to_s.length
|
|
183
|
+
when :UALPHA
|
|
184
|
+
@list_index << 'A'
|
|
185
|
+
@list_width << list.items.length.to_s.length
|
|
186
|
+
else
|
|
187
|
+
raise Error, "invalid list type #{list.type}"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
@list_type << list.type
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
##
|
|
194
|
+
# Adds +paragraph+ to the output
|
|
140
195
|
|
|
141
|
-
|
|
142
|
-
|
|
196
|
+
def accept_paragraph(paragraph)
|
|
197
|
+
text = paragraph.text @hard_break
|
|
198
|
+
wrap attributes text
|
|
199
|
+
end
|
|
143
200
|
|
|
144
|
-
|
|
145
|
-
|
|
201
|
+
##
|
|
202
|
+
# Adds +paragraph+ to the output
|
|
146
203
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
attributes
|
|
204
|
+
def accept_indented_paragraph(paragraph)
|
|
205
|
+
@indent += paragraph.indent
|
|
206
|
+
text = paragraph.text @hard_break
|
|
207
|
+
wrap attributes text
|
|
208
|
+
@indent -= paragraph.indent
|
|
151
209
|
end
|
|
152
210
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
211
|
+
##
|
|
212
|
+
# Adds +raw+ to the output
|
|
213
|
+
|
|
214
|
+
def accept_raw(raw)
|
|
215
|
+
@res << raw.parts.join("\n")
|
|
158
216
|
end
|
|
159
217
|
|
|
160
|
-
|
|
161
|
-
|
|
218
|
+
##
|
|
219
|
+
# Adds +rule+ to the output
|
|
162
220
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
@prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
|
|
169
|
-
width = bullet.length + 1
|
|
170
|
-
@indent += width
|
|
171
|
-
end
|
|
172
|
-
end
|
|
221
|
+
def accept_rule(rule)
|
|
222
|
+
use_prefix or @res << ' ' * @indent
|
|
223
|
+
@res << '-' * (@width - @indent)
|
|
224
|
+
@res << "\n"
|
|
225
|
+
end
|
|
173
226
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
def accept_list_start(list)
|
|
178
|
-
case list.type
|
|
179
|
-
when :BULLET then
|
|
180
|
-
@list_index << nil
|
|
181
|
-
@list_width << 1
|
|
182
|
-
when :LABEL, :NOTE then
|
|
183
|
-
@list_index << nil
|
|
184
|
-
@list_width << 2
|
|
185
|
-
when :LALPHA then
|
|
186
|
-
@list_index << 'a'
|
|
187
|
-
@list_width << list.items.length.to_s.length
|
|
188
|
-
when :NUMBER then
|
|
189
|
-
@list_index << 1
|
|
190
|
-
@list_width << list.items.length.to_s.length
|
|
191
|
-
when :UALPHA then
|
|
192
|
-
@list_index << 'A'
|
|
193
|
-
@list_width << list.items.length.to_s.length
|
|
194
|
-
else
|
|
195
|
-
raise RDoc::Error, "invalid list type #{list.type}"
|
|
196
|
-
end
|
|
227
|
+
##
|
|
228
|
+
# Outputs +verbatim+ indented 2 columns
|
|
197
229
|
|
|
198
|
-
|
|
199
|
-
|
|
230
|
+
def accept_verbatim(verbatim)
|
|
231
|
+
indent = ' ' * (@indent + 2)
|
|
200
232
|
|
|
201
|
-
|
|
202
|
-
|
|
233
|
+
verbatim.parts.each do |part|
|
|
234
|
+
@res << indent unless part == "\n"
|
|
235
|
+
@res << part
|
|
236
|
+
end
|
|
203
237
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
wrap attributes text
|
|
207
|
-
end
|
|
238
|
+
@res << "\n"
|
|
239
|
+
end
|
|
208
240
|
|
|
209
|
-
|
|
210
|
-
|
|
241
|
+
##
|
|
242
|
+
# Adds +table+ to the output
|
|
243
|
+
|
|
244
|
+
def accept_table(header, body, aligns)
|
|
245
|
+
header = header.map { |h| attributes h }
|
|
246
|
+
body = body.map { |row| row.map { |t| attributes t } }
|
|
247
|
+
widths = header.zip(*body).map do |cols|
|
|
248
|
+
cols.compact.map { |col| calculate_text_width(col) }.max
|
|
249
|
+
end
|
|
250
|
+
aligns = aligns.map do |a|
|
|
251
|
+
case a
|
|
252
|
+
when nil, :center
|
|
253
|
+
:center
|
|
254
|
+
when :left
|
|
255
|
+
:ljust
|
|
256
|
+
when :right
|
|
257
|
+
:rjust
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
@res << header.zip(widths, aligns).map do |h, w, a|
|
|
261
|
+
extra_width = h.size - calculate_text_width(h)
|
|
262
|
+
h.__send__(a, w + extra_width)
|
|
263
|
+
end.join("|").rstrip << "\n"
|
|
264
|
+
@res << widths.map {|w| "-" * w }.join("|") << "\n"
|
|
265
|
+
body.each do |row|
|
|
266
|
+
@res << widths.zip(aligns).each_with_index.map do |(w, a), i|
|
|
267
|
+
t = row[i] || ""
|
|
268
|
+
extra_width = t.size - calculate_text_width(t)
|
|
269
|
+
t.__send__(a, w + extra_width)
|
|
270
|
+
end.join("|").rstrip << "\n"
|
|
271
|
+
end
|
|
272
|
+
end
|
|
211
273
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
wrap attributes text
|
|
216
|
-
@indent -= paragraph.indent
|
|
217
|
-
end
|
|
274
|
+
def calculate_text_width(text)
|
|
275
|
+
text.size
|
|
276
|
+
end
|
|
218
277
|
|
|
219
|
-
|
|
220
|
-
|
|
278
|
+
def handle_PLAIN_TEXT(text)
|
|
279
|
+
add_text(text)
|
|
280
|
+
end
|
|
221
281
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
282
|
+
def handle_REGEXP_HANDLING_TEXT(text)
|
|
283
|
+
add_text(text)
|
|
284
|
+
end
|
|
225
285
|
|
|
226
|
-
|
|
227
|
-
|
|
286
|
+
def handle_BOLD(target)
|
|
287
|
+
on(:BOLD)
|
|
288
|
+
super
|
|
289
|
+
off(:BOLD)
|
|
290
|
+
end
|
|
228
291
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
292
|
+
def handle_EM(target)
|
|
293
|
+
on(:EM)
|
|
294
|
+
super
|
|
295
|
+
off(:EM)
|
|
296
|
+
end
|
|
234
297
|
|
|
235
|
-
|
|
236
|
-
|
|
298
|
+
def handle_BOLD_WORD(word)
|
|
299
|
+
on(:BOLD)
|
|
300
|
+
super
|
|
301
|
+
off(:BOLD)
|
|
302
|
+
end
|
|
237
303
|
|
|
238
|
-
|
|
239
|
-
|
|
304
|
+
def handle_EM_WORD(word)
|
|
305
|
+
on(:EM)
|
|
306
|
+
super
|
|
307
|
+
off(:EM)
|
|
308
|
+
end
|
|
240
309
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
310
|
+
def handle_TT(code)
|
|
311
|
+
on(:TT)
|
|
312
|
+
super
|
|
313
|
+
off(:TT)
|
|
314
|
+
end
|
|
245
315
|
|
|
246
|
-
|
|
247
|
-
|
|
316
|
+
def handle_STRIKE(target)
|
|
317
|
+
on(:STRIKE)
|
|
318
|
+
super
|
|
319
|
+
off(:STRIKE)
|
|
320
|
+
end
|
|
248
321
|
|
|
249
|
-
|
|
250
|
-
|
|
322
|
+
def handle_HARD_BREAK
|
|
323
|
+
add_text("\n")
|
|
324
|
+
end
|
|
251
325
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
widths = header.zip(*body).map do |cols|
|
|
256
|
-
cols.map { |col| calculate_text_width(col) }.max
|
|
257
|
-
end
|
|
258
|
-
aligns = aligns.map do |a|
|
|
259
|
-
case a
|
|
260
|
-
when nil, :center
|
|
261
|
-
:center
|
|
262
|
-
when :left
|
|
263
|
-
:ljust
|
|
264
|
-
when :right
|
|
265
|
-
:rjust
|
|
326
|
+
def handle_TIDYLINK(label_part, url)
|
|
327
|
+
super
|
|
328
|
+
add_text("( #{url} )")
|
|
266
329
|
end
|
|
267
|
-
end
|
|
268
|
-
@res << header.zip(widths, aligns).map do |h, w, a|
|
|
269
|
-
extra_width = h.size - calculate_text_width(h)
|
|
270
|
-
h.__send__(a, w + extra_width)
|
|
271
|
-
end.join("|").rstrip << "\n"
|
|
272
|
-
@res << widths.map {|w| "-" * w }.join("|") << "\n"
|
|
273
|
-
body.each do |row|
|
|
274
|
-
@res << row.zip(widths, aligns).map do |t, w, a|
|
|
275
|
-
extra_width = t.size - calculate_text_width(t)
|
|
276
|
-
t.__send__(a, w + extra_width)
|
|
277
|
-
end.join("|").rstrip << "\n"
|
|
278
|
-
end
|
|
279
|
-
end
|
|
280
330
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
331
|
+
def handle_inline(text, initial_attributes = [])
|
|
332
|
+
@attributes = Hash.new(0)
|
|
333
|
+
initial_attributes.each { |attr| on(attr) }
|
|
334
|
+
out = @inline_output = +''
|
|
335
|
+
super(text)
|
|
336
|
+
@inline_output = nil
|
|
337
|
+
out
|
|
338
|
+
end
|
|
284
339
|
|
|
285
|
-
|
|
286
|
-
|
|
340
|
+
def on(attr)
|
|
341
|
+
@attributes[attr] += 1
|
|
342
|
+
end
|
|
287
343
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
344
|
+
def off(attr)
|
|
345
|
+
@attributes[attr] -= 1
|
|
346
|
+
@attributes.delete(attr) if @attributes[attr] == 0
|
|
347
|
+
end
|
|
292
348
|
|
|
293
|
-
|
|
294
|
-
|
|
349
|
+
def add_text(text)
|
|
350
|
+
emit_inline(text)
|
|
351
|
+
end
|
|
295
352
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
353
|
+
def emit_inline(text)
|
|
354
|
+
@inline_output << text
|
|
355
|
+
end
|
|
299
356
|
|
|
300
|
-
|
|
301
|
-
|
|
357
|
+
##
|
|
358
|
+
# Applies attribute-specific markup to +text+ using RDoc::Markup::InlineParser
|
|
302
359
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
text
|
|
307
|
-
end
|
|
360
|
+
def attributes(text)
|
|
361
|
+
handle_inline(text)
|
|
362
|
+
end
|
|
308
363
|
|
|
309
|
-
|
|
310
|
-
|
|
364
|
+
##
|
|
365
|
+
# Returns the generated output
|
|
311
366
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
367
|
+
def end_accepting
|
|
368
|
+
@res.join
|
|
369
|
+
end
|
|
315
370
|
|
|
316
|
-
|
|
317
|
-
|
|
371
|
+
##
|
|
372
|
+
# Removes preceding \\ from the suppressed crossref +target+
|
|
318
373
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
@prefix = nil
|
|
374
|
+
def handle_regexp_SUPPRESSED_CROSSREF(text)
|
|
375
|
+
text.sub('\\', '')
|
|
376
|
+
end
|
|
323
377
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
@list_width = []
|
|
327
|
-
end
|
|
378
|
+
##
|
|
379
|
+
# Prepares the visitor for text generation
|
|
328
380
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
381
|
+
def start_accepting
|
|
382
|
+
@res = [""]
|
|
383
|
+
@indent = 0
|
|
384
|
+
@prefix = nil
|
|
332
385
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
386
|
+
@list_index = []
|
|
387
|
+
@list_type = []
|
|
388
|
+
@list_width = []
|
|
389
|
+
end
|
|
336
390
|
|
|
337
|
-
|
|
338
|
-
|
|
391
|
+
##
|
|
392
|
+
# Adds the stored #prefix to the output and clears it. Lists generate a
|
|
393
|
+
# prefix for later consumption.
|
|
394
|
+
|
|
395
|
+
def use_prefix
|
|
396
|
+
prefix, @prefix = @prefix, nil
|
|
397
|
+
@res << prefix if prefix
|
|
398
|
+
|
|
399
|
+
prefix
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
##
|
|
403
|
+
# Wraps +text+ to #width
|
|
339
404
|
|
|
340
|
-
|
|
341
|
-
|
|
405
|
+
def wrap(text)
|
|
406
|
+
return unless text && !text.empty?
|
|
342
407
|
|
|
343
|
-
|
|
344
|
-
return unless text && !text.empty?
|
|
408
|
+
text_len = @width - @indent
|
|
345
409
|
|
|
346
|
-
|
|
410
|
+
text_len = 20 if text_len < 20
|
|
347
411
|
|
|
348
|
-
|
|
412
|
+
next_prefix = ' ' * @indent
|
|
349
413
|
|
|
350
|
-
|
|
414
|
+
prefix = @prefix || next_prefix
|
|
415
|
+
@prefix = nil
|
|
351
416
|
|
|
352
|
-
|
|
353
|
-
|
|
417
|
+
text.scan(/\G(?:([^ \n]{#{text_len}})(?=[^ \n])|(.{1,#{text_len}})(?:[ \n]|\z))/) do
|
|
418
|
+
@res << prefix << ($1 || $2) << "\n"
|
|
419
|
+
prefix = next_prefix
|
|
420
|
+
end
|
|
421
|
+
end
|
|
354
422
|
|
|
355
|
-
text.scan(/\G(?:([^ \n]{#{text_len}})(?=[^ \n])|(.{1,#{text_len}})(?:[ \n]|\z))/) do
|
|
356
|
-
@res << prefix << ($1 || $2) << "\n"
|
|
357
|
-
prefix = next_prefix
|
|
358
423
|
end
|
|
359
424
|
end
|
|
360
|
-
|
|
361
425
|
end
|