rdoc 5.1.0 → 6.13.1
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 +5 -5
- data/CONTRIBUTING.rdoc +5 -6
- data/ExampleMarkdown.md +2 -0
- data/ExampleRDoc.rdoc +2 -0
- data/History.rdoc +68 -66
- data/LEGAL.rdoc +1 -1
- data/LICENSE.rdoc +2 -0
- data/README.rdoc +18 -6
- data/RI.md +842 -0
- data/TODO.rdoc +8 -7
- data/exe/rdoc +0 -1
- data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -12
- data/lib/rdoc/{anon_class.rb → code_object/anon_class.rb} +1 -2
- data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +83 -26
- data/lib/rdoc/{attr.rb → code_object/attr.rb} +5 -9
- data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +112 -24
- data/lib/rdoc/{constant.rb → code_object/constant.rb} +4 -5
- data/lib/rdoc/{context → code_object/context}/section.rb +13 -83
- data/lib/rdoc/{context.rb → code_object/context.rb} +69 -70
- data/lib/rdoc/{extend.rb → code_object/extend.rb} +1 -2
- data/lib/rdoc/{ghost_method.rb → code_object/ghost_method.rb} +1 -2
- data/lib/rdoc/{include.rb → code_object/include.rb} +1 -2
- data/lib/rdoc/{meta_method.rb → code_object/meta_method.rb} +1 -2
- data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +22 -31
- data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +1 -2
- data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +4 -5
- data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
- data/lib/rdoc/{require.rb → code_object/require.rb} +2 -3
- data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +6 -2
- data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +22 -32
- data/lib/rdoc/code_object.rb +8 -41
- data/lib/rdoc/code_objects.rb +2 -3
- data/lib/rdoc/comment.rb +48 -41
- data/lib/rdoc/cross_reference.rb +77 -33
- data/lib/rdoc/encoding.rb +50 -38
- data/lib/rdoc/erb_partial.rb +2 -3
- data/lib/rdoc/erbio.rb +4 -5
- data/lib/rdoc/generator/darkfish.rb +178 -125
- data/lib/rdoc/generator/json_index.rb +9 -22
- data/lib/rdoc/generator/markup.rb +6 -17
- data/lib/rdoc/generator/pot/message_extractor.rb +4 -4
- data/lib/rdoc/generator/pot/po.rb +3 -3
- data/lib/rdoc/generator/pot/po_entry.rb +12 -12
- data/lib/rdoc/generator/pot.rb +4 -8
- data/lib/rdoc/generator/ri.rb +1 -2
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -12
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +19 -10
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +26 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
- data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +1 -1
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +27 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
- data/lib/rdoc/generator/template/darkfish/class.rhtml +125 -78
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +430 -339
- data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/index.rhtml +13 -13
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -92
- data/lib/rdoc/generator/template/darkfish/js/search.js +35 -34
- data/lib/rdoc/generator/template/darkfish/page.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +10 -8
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +20 -18
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +32 -20
- data/lib/rdoc/generator/template/json_index/js/navigation.js +12 -49
- data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
- data/lib/rdoc/generator.rb +6 -6
- data/lib/rdoc/i18n/locale.rb +1 -1
- data/lib/rdoc/i18n/text.rb +5 -5
- data/lib/rdoc/i18n.rb +4 -4
- data/lib/rdoc/known_classes.rb +6 -5
- data/lib/rdoc/markdown/entities.rb +1 -2
- data/lib/rdoc/markdown/literals.kpeg +1 -2
- data/lib/rdoc/markdown/literals.rb +99 -50
- data/lib/rdoc/markdown.kpeg +115 -58
- data/lib/rdoc/markdown.rb +1584 -902
- data/lib/rdoc/markup/attr_changer.rb +1 -2
- data/lib/rdoc/markup/attr_span.rb +9 -4
- data/lib/rdoc/markup/attribute_manager.rb +118 -57
- data/lib/rdoc/markup/attributes.rb +7 -8
- data/lib/rdoc/markup/blank_line.rb +1 -2
- data/lib/rdoc/markup/block_quote.rb +1 -2
- data/lib/rdoc/markup/document.rb +1 -2
- data/lib/rdoc/markup/formatter.rb +44 -37
- data/lib/rdoc/markup/hard_break.rb +1 -2
- data/lib/rdoc/markup/heading.rb +11 -6
- data/lib/rdoc/markup/include.rb +1 -2
- data/lib/rdoc/markup/indented_paragraph.rb +1 -2
- data/lib/rdoc/markup/list.rb +1 -2
- data/lib/rdoc/markup/list_item.rb +1 -2
- data/lib/rdoc/markup/paragraph.rb +1 -2
- data/lib/rdoc/markup/parser.rb +90 -48
- data/lib/rdoc/markup/pre_process.rb +38 -11
- data/lib/rdoc/markup/raw.rb +1 -2
- data/lib/rdoc/markup/regexp_handling.rb +40 -0
- data/lib/rdoc/markup/rule.rb +1 -2
- data/lib/rdoc/markup/table.rb +56 -0
- data/lib/rdoc/markup/to_ansi.rb +1 -2
- data/lib/rdoc/markup/to_bs.rb +30 -5
- data/lib/rdoc/markup/to_html.rb +95 -40
- data/lib/rdoc/markup/to_html_crossref.rb +108 -43
- data/lib/rdoc/markup/to_html_snippet.rb +13 -11
- data/lib/rdoc/markup/to_joined_paragraph.rb +6 -32
- data/lib/rdoc/markup/to_label.rb +11 -12
- data/lib/rdoc/markup/to_markdown.rb +13 -14
- data/lib/rdoc/markup/to_rdoc.rb +49 -31
- data/lib/rdoc/markup/to_table_of_contents.rb +2 -2
- data/lib/rdoc/markup/to_test.rb +1 -2
- data/lib/rdoc/markup/to_tt_only.rb +3 -4
- data/lib/rdoc/markup/verbatim.rb +1 -2
- data/lib/rdoc/markup.rb +64 -694
- data/lib/rdoc/options.rb +226 -44
- data/lib/rdoc/parser/c.rb +231 -246
- data/lib/rdoc/parser/changelog.rb +169 -23
- data/lib/rdoc/parser/markdown.rb +1 -3
- data/lib/rdoc/parser/prism_ruby.rb +1092 -0
- data/lib/rdoc/parser/rd.rb +1 -2
- data/lib/rdoc/parser/ripper_state_lex.rb +302 -0
- data/lib/rdoc/parser/ruby.rb +695 -478
- data/lib/rdoc/parser/ruby_tools.rb +33 -36
- data/lib/rdoc/parser/simple.rb +4 -4
- data/lib/rdoc/parser/text.rb +1 -2
- data/lib/rdoc/parser.rb +37 -42
- data/lib/rdoc/rd/block_parser.rb +708 -57
- data/lib/rdoc/rd/block_parser.ry +15 -11
- data/lib/rdoc/rd/inline.rb +5 -6
- data/lib/rdoc/rd/inline_parser.rb +787 -140
- data/lib/rdoc/rd/inline_parser.ry +1 -1
- data/lib/rdoc/rd.rb +4 -5
- data/lib/rdoc/rdoc.rb +72 -87
- data/lib/rdoc/ri/driver.rb +236 -152
- data/lib/rdoc/ri/formatter.rb +1 -1
- data/lib/rdoc/ri/paths.rb +4 -18
- data/lib/rdoc/ri/store.rb +1 -2
- data/lib/rdoc/ri/task.rb +2 -2
- data/lib/rdoc/ri.rb +5 -6
- data/lib/rdoc/rubygems_hook.rb +98 -20
- data/lib/rdoc/servlet.rb +30 -20
- data/lib/rdoc/stats/normal.rb +24 -18
- data/lib/rdoc/stats/quiet.rb +1 -2
- data/lib/rdoc/stats/verbose.rb +1 -3
- data/lib/rdoc/stats.rb +6 -7
- data/lib/rdoc/store.rb +84 -55
- data/lib/rdoc/task.rb +35 -10
- data/lib/rdoc/text.rb +40 -27
- data/lib/rdoc/token_stream.rb +56 -34
- data/lib/rdoc/tom_doc.rb +18 -19
- data/lib/rdoc/version.rb +10 -0
- data/lib/rdoc.rb +80 -56
- data/lib/rubygems_plugin.rb +23 -0
- data/man/ri.1 +247 -0
- metadata +45 -99
- data/.document +0 -5
- data/.gitignore +0 -13
- data/.travis.yml +0 -24
- data/Gemfile +0 -3
- data/RI.rdoc +0 -57
- data/Rakefile +0 -133
- data/bin/console +0 -7
- data/bin/setup +0 -6
- data/lib/gauntlet_rdoc.rb +0 -82
- data/lib/rdoc/generator/template/darkfish/.document +0 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
- data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
- data/lib/rdoc/generator/template/json_index/.document +0 -1
- data/lib/rdoc/markup/formatter_test_case.rb +0 -764
- data/lib/rdoc/markup/inline.rb +0 -2
- data/lib/rdoc/markup/special.rb +0 -41
- data/lib/rdoc/markup/text_formatter_test_case.rb +0 -115
- data/lib/rdoc/ruby_lex.rb +0 -1367
- data/lib/rdoc/ruby_token.rb +0 -461
- data/lib/rdoc/test_case.rb +0 -204
- data/rdoc.gemspec +0 -57
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# An array of attributes which parallels the characters in a string.
|
4
4
|
|
@@ -7,16 +7,22 @@ class RDoc::Markup::AttrSpan
|
|
7
7
|
##
|
8
8
|
# Creates a new AttrSpan for +length+ characters
|
9
9
|
|
10
|
-
def initialize(length)
|
10
|
+
def initialize(length, exclusive)
|
11
11
|
@attrs = Array.new(length, 0)
|
12
|
+
@exclusive = exclusive
|
12
13
|
end
|
13
14
|
|
14
15
|
##
|
15
16
|
# Toggles +bits+ from +start+ to +length+
|
16
17
|
def set_attrs(start, length, bits)
|
18
|
+
updated = false
|
17
19
|
for i in start ... (start+length)
|
18
|
-
@attrs[i]
|
20
|
+
if (@exclusive & @attrs[i]) == 0 || (@exclusive & bits) != 0
|
21
|
+
@attrs[i] |= bits
|
22
|
+
updated = true
|
23
|
+
end
|
19
24
|
end
|
25
|
+
updated
|
20
26
|
end
|
21
27
|
|
22
28
|
##
|
@@ -27,4 +33,3 @@ class RDoc::Markup::AttrSpan
|
|
27
33
|
end
|
28
34
|
|
29
35
|
end
|
30
|
-
|
@@ -1,8 +1,19 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
##
|
3
4
|
# Manages changes of attributes in a block of text
|
4
5
|
|
5
6
|
class RDoc::Markup::AttributeManager
|
7
|
+
unless ::MatchData.method_defined?(:match_length)
|
8
|
+
using ::Module.new {
|
9
|
+
refine(::MatchData) {
|
10
|
+
def match_length(nth) # :nodoc:
|
11
|
+
b, e = offset(nth)
|
12
|
+
e - b if b
|
13
|
+
end
|
14
|
+
}
|
15
|
+
}
|
16
|
+
end
|
6
17
|
|
7
18
|
##
|
8
19
|
# The NUL character
|
@@ -53,10 +64,14 @@ class RDoc::Markup::AttributeManager
|
|
53
64
|
attr_reader :protectable
|
54
65
|
|
55
66
|
##
|
56
|
-
# And this maps
|
57
|
-
# something like a WikiWord
|
67
|
+
# And this maps _regexp handling_ sequences to a name. A regexp handling
|
68
|
+
# sequence is something like a WikiWord
|
69
|
+
|
70
|
+
attr_reader :regexp_handlings
|
58
71
|
|
59
|
-
|
72
|
+
##
|
73
|
+
# A bits of exclusive maps
|
74
|
+
attr_reader :exclusive_bitmap
|
60
75
|
|
61
76
|
##
|
62
77
|
# Creates a new attribute manager that understands bold, emphasized and
|
@@ -66,19 +81,20 @@ class RDoc::Markup::AttributeManager
|
|
66
81
|
@html_tags = {}
|
67
82
|
@matching_word_pairs = {}
|
68
83
|
@protectable = %w[<]
|
69
|
-
@
|
84
|
+
@regexp_handlings = []
|
70
85
|
@word_pair_map = {}
|
86
|
+
@exclusive_bitmap = 0
|
71
87
|
@attributes = RDoc::Markup::Attributes.new
|
72
88
|
|
73
|
-
add_word_pair "*", "*", :BOLD
|
74
|
-
add_word_pair "_", "_", :EM
|
75
|
-
add_word_pair "+", "+", :TT
|
89
|
+
add_word_pair "*", "*", :BOLD, true
|
90
|
+
add_word_pair "_", "_", :EM, true
|
91
|
+
add_word_pair "+", "+", :TT, true
|
76
92
|
|
77
|
-
add_html "em", :EM
|
78
|
-
add_html "i", :EM
|
79
|
-
add_html "b", :BOLD
|
80
|
-
add_html "tt", :TT
|
81
|
-
add_html "code", :TT
|
93
|
+
add_html "em", :EM, true
|
94
|
+
add_html "i", :EM, true
|
95
|
+
add_html "b", :BOLD, true
|
96
|
+
add_html "tt", :TT, true
|
97
|
+
add_html "code", :TT, true
|
82
98
|
end
|
83
99
|
|
84
100
|
##
|
@@ -122,29 +138,63 @@ class RDoc::Markup::AttributeManager
|
|
122
138
|
res
|
123
139
|
end
|
124
140
|
|
141
|
+
# :nodoc:
|
142
|
+
def exclusive?(attr)
|
143
|
+
(attr & @exclusive_bitmap) != 0
|
144
|
+
end
|
145
|
+
|
146
|
+
NON_PRINTING_START = "\1" # :nodoc:
|
147
|
+
NON_PRINTING_END = "\2" # :nodoc:
|
148
|
+
|
125
149
|
##
|
126
150
|
# Map attributes like <b>text</b>to the sequence
|
127
151
|
# \001\002<char>\001\003<char>, where <char> is a per-attribute specific
|
128
152
|
# character
|
129
153
|
|
130
|
-
def convert_attrs(str, attrs)
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
re = /(^|\W)([#{tags}])([#\\]?[\w:.\/-]+?\S?)\2(\W|$)/
|
154
|
+
def convert_attrs(str, attrs, exclusive = false)
|
155
|
+
convert_attrs_matching_word_pairs(str, attrs, exclusive)
|
156
|
+
convert_attrs_word_pair_map(str, attrs, exclusive)
|
157
|
+
end
|
135
158
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
159
|
+
# :nodoc:
|
160
|
+
def convert_attrs_matching_word_pairs(str, attrs, exclusive)
|
161
|
+
# first do matching ones
|
162
|
+
tags = @matching_word_pairs.select { |start, bitmap|
|
163
|
+
exclusive == exclusive?(bitmap)
|
164
|
+
}.keys
|
165
|
+
return if tags.empty?
|
166
|
+
tags = "[#{tags.join("")}](?!#{PROTECT_ATTR})"
|
167
|
+
all_tags = "[#{@matching_word_pairs.keys.join("")}](?!#{PROTECT_ATTR})"
|
168
|
+
|
169
|
+
re = /(?:^|\W|#{all_tags})\K(#{tags})(\1*[#\\]?[\w:#{PROTECT_ATTR}.\/\[\]-]+?\S?)\1(?!\1)(?=#{all_tags}|\W|$)/
|
170
|
+
|
171
|
+
1 while str.gsub!(re) { |orig|
|
172
|
+
a, w = (m = $~).values_at(1, 2)
|
173
|
+
attr = @matching_word_pairs[a]
|
174
|
+
if attrs.set_attrs(m.begin(2), w.length, attr)
|
175
|
+
a = NULL * a.length
|
176
|
+
else
|
177
|
+
a = NON_PRINTING_START + a + NON_PRINTING_END
|
178
|
+
end
|
179
|
+
a + w + a
|
180
|
+
}
|
181
|
+
str.delete!(NON_PRINTING_START + NON_PRINTING_END)
|
182
|
+
end
|
141
183
|
|
184
|
+
# :nodoc:
|
185
|
+
def convert_attrs_word_pair_map(str, attrs, exclusive)
|
142
186
|
# then non-matching
|
143
187
|
unless @word_pair_map.empty? then
|
144
188
|
@word_pair_map.each do |regexp, attr|
|
145
|
-
|
146
|
-
|
147
|
-
|
189
|
+
next unless exclusive == exclusive?(attr)
|
190
|
+
1 while str.gsub!(regexp) { |orig|
|
191
|
+
w = (m = ($~))[2]
|
192
|
+
updated = attrs.set_attrs(m.begin(2), w.length, attr)
|
193
|
+
if updated
|
194
|
+
NULL * m.match_length(1) + w + NULL * m.match_length(3)
|
195
|
+
else
|
196
|
+
orig
|
197
|
+
end
|
148
198
|
}
|
149
199
|
end
|
150
200
|
end
|
@@ -153,35 +203,38 @@ class RDoc::Markup::AttributeManager
|
|
153
203
|
##
|
154
204
|
# Converts HTML tags to RDoc attributes
|
155
205
|
|
156
|
-
def convert_html(str, attrs)
|
157
|
-
tags = @html_tags.
|
206
|
+
def convert_html(str, attrs, exclusive = false)
|
207
|
+
tags = @html_tags.select { |start, bitmap|
|
208
|
+
exclusive == exclusive?(bitmap)
|
209
|
+
}.keys.join '|'
|
158
210
|
|
159
|
-
1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) {
|
211
|
+
1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) { |orig|
|
160
212
|
attr = @html_tags[$1.downcase]
|
161
|
-
html_length =
|
213
|
+
html_length = $~.match_length(1) + 2 # "<>".length
|
162
214
|
seq = NULL * html_length
|
163
|
-
attrs.set_attrs(
|
215
|
+
attrs.set_attrs($~.begin(2), $~.match_length(2), attr)
|
164
216
|
seq + $2 + seq + NULL
|
165
217
|
}
|
166
218
|
end
|
167
219
|
|
168
220
|
##
|
169
|
-
# Converts
|
221
|
+
# Converts regexp handling sequences to RDoc attributes
|
170
222
|
|
171
|
-
def
|
172
|
-
@
|
223
|
+
def convert_regexp_handlings str, attrs, exclusive = false
|
224
|
+
@regexp_handlings.each do |regexp, attribute|
|
225
|
+
next unless exclusive == exclusive?(attribute)
|
173
226
|
str.scan(regexp) do
|
174
227
|
capture = $~.size == 1 ? 0 : 1
|
175
228
|
|
176
229
|
s, e = $~.offset capture
|
177
230
|
|
178
|
-
attrs.set_attrs s, e - s, attribute | @attributes.
|
231
|
+
attrs.set_attrs s, e - s, attribute | @attributes.regexp_handling
|
179
232
|
end
|
180
233
|
end
|
181
234
|
end
|
182
235
|
|
183
236
|
##
|
184
|
-
# Escapes
|
237
|
+
# Escapes regexp handling sequences of text to prevent conversion to RDoc
|
185
238
|
|
186
239
|
def mask_protected_sequences
|
187
240
|
# protect __send__, __FILE__, etc.
|
@@ -193,7 +246,7 @@ class RDoc::Markup::AttributeManager
|
|
193
246
|
end
|
194
247
|
|
195
248
|
##
|
196
|
-
# Unescapes
|
249
|
+
# Unescapes regexp handling sequences of text
|
197
250
|
|
198
251
|
def unmask_protected_sequences
|
199
252
|
@str.gsub!(/(.)#{PROTECT_ATTR}/, "\\1\000")
|
@@ -205,9 +258,9 @@ class RDoc::Markup::AttributeManager
|
|
205
258
|
#
|
206
259
|
# am.add_word_pair '*', '*', :BOLD
|
207
260
|
|
208
|
-
def add_word_pair(start, stop, name)
|
261
|
+
def add_word_pair(start, stop, name, exclusive = false)
|
209
262
|
raise ArgumentError, "Word flags may not start with '<'" if
|
210
|
-
start[0,1] == '<'
|
263
|
+
start[0, 1] == '<'
|
211
264
|
|
212
265
|
bitmap = @attributes.bitmap_for name
|
213
266
|
|
@@ -218,8 +271,10 @@ class RDoc::Markup::AttributeManager
|
|
218
271
|
@word_pair_map[pattern] = bitmap
|
219
272
|
end
|
220
273
|
|
221
|
-
@protectable << start[0,1]
|
274
|
+
@protectable << start[0, 1]
|
222
275
|
@protectable.uniq!
|
276
|
+
|
277
|
+
@exclusive_bitmap |= bitmap if exclusive
|
223
278
|
end
|
224
279
|
|
225
280
|
##
|
@@ -228,33 +283,40 @@ class RDoc::Markup::AttributeManager
|
|
228
283
|
#
|
229
284
|
# am.add_html 'em', :EM
|
230
285
|
|
231
|
-
def add_html(tag, name)
|
232
|
-
|
286
|
+
def add_html(tag, name, exclusive = false)
|
287
|
+
bitmap = @attributes.bitmap_for name
|
288
|
+
@html_tags[tag.downcase] = bitmap
|
289
|
+
@exclusive_bitmap |= bitmap if exclusive
|
233
290
|
end
|
234
291
|
|
235
292
|
##
|
236
|
-
# Adds a
|
293
|
+
# Adds a regexp handling for +pattern+ with +name+. A simple URL handler
|
237
294
|
# would be:
|
238
295
|
#
|
239
|
-
# @am.
|
296
|
+
# @am.add_regexp_handling(/((https?:)\S+\w)/, :HYPERLINK)
|
240
297
|
|
241
|
-
def
|
242
|
-
|
298
|
+
def add_regexp_handling pattern, name, exclusive = false
|
299
|
+
bitmap = @attributes.bitmap_for(name)
|
300
|
+
@regexp_handlings << [pattern, bitmap]
|
301
|
+
@exclusive_bitmap |= bitmap if exclusive
|
243
302
|
end
|
244
303
|
|
245
304
|
##
|
246
|
-
# Processes +str+ converting attributes, HTML and
|
305
|
+
# Processes +str+ converting attributes, HTML and regexp handlings
|
247
306
|
|
248
307
|
def flow str
|
249
|
-
@str = str
|
308
|
+
@str = str.dup
|
250
309
|
|
251
310
|
mask_protected_sequences
|
252
311
|
|
253
|
-
@attrs = RDoc::Markup::AttrSpan.new @str.length
|
312
|
+
@attrs = RDoc::Markup::AttrSpan.new @str.length, @exclusive_bitmap
|
254
313
|
|
255
|
-
convert_attrs
|
256
|
-
convert_html
|
257
|
-
|
314
|
+
convert_attrs @str, @attrs, true
|
315
|
+
convert_html @str, @attrs, true
|
316
|
+
convert_regexp_handlings @str, @attrs, true
|
317
|
+
convert_attrs @str, @attrs
|
318
|
+
convert_html @str, @attrs
|
319
|
+
convert_regexp_handlings @str, @attrs
|
258
320
|
|
259
321
|
unmask_protected_sequences
|
260
322
|
|
@@ -312,12 +374,12 @@ class RDoc::Markup::AttributeManager
|
|
312
374
|
res << change_attribute(current_attr, new_attr)
|
313
375
|
current_attr = new_attr
|
314
376
|
|
315
|
-
if (current_attr & @attributes.
|
377
|
+
if (current_attr & @attributes.regexp_handling) != 0 then
|
316
378
|
i += 1 while
|
317
|
-
i < str_len and (@attrs[i] & @attributes.
|
379
|
+
i < str_len and (@attrs[i] & @attributes.regexp_handling) != 0
|
318
380
|
|
319
|
-
res << RDoc::Markup::
|
320
|
-
|
381
|
+
res << RDoc::Markup::RegexpHandling.new(current_attr,
|
382
|
+
copy_string(start_pos, i))
|
321
383
|
start_pos = i
|
322
384
|
next
|
323
385
|
end
|
@@ -341,4 +403,3 @@ class RDoc::Markup::AttributeManager
|
|
341
403
|
end
|
342
404
|
|
343
405
|
end
|
344
|
-
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# We manage a set of attributes. Each attribute has a symbol name and a bit
|
4
4
|
# value.
|
@@ -6,21 +6,21 @@
|
|
6
6
|
class RDoc::Markup::Attributes
|
7
7
|
|
8
8
|
##
|
9
|
-
# The
|
9
|
+
# The regexp handling attribute type. See RDoc::Markup#add_regexp_handling
|
10
10
|
|
11
|
-
attr_reader :
|
11
|
+
attr_reader :regexp_handling
|
12
12
|
|
13
13
|
##
|
14
14
|
# Creates a new attributes set.
|
15
15
|
|
16
16
|
def initialize
|
17
|
-
@
|
17
|
+
@regexp_handling = 1
|
18
18
|
|
19
19
|
@name_to_bitmap = [
|
20
|
-
[:
|
20
|
+
[:_REGEXP_HANDLING_, @regexp_handling],
|
21
21
|
]
|
22
22
|
|
23
|
-
@next_bitmap = @
|
23
|
+
@next_bitmap = @regexp_handling << 1
|
24
24
|
end
|
25
25
|
|
26
26
|
##
|
@@ -61,11 +61,10 @@ class RDoc::Markup::Attributes
|
|
61
61
|
return enum_for __method__, bitmap unless block_given?
|
62
62
|
|
63
63
|
@name_to_bitmap.each do |name, bit|
|
64
|
-
next if bit == @
|
64
|
+
next if bit == @regexp_handling
|
65
65
|
|
66
66
|
yield name.to_s if (bitmap & bit) != 0
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
70
|
end
|
71
|
-
|
data/lib/rdoc/markup/document.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# Base class for RDoc markup formatters
|
4
4
|
#
|
@@ -50,7 +50,7 @@ class RDoc::Markup::Formatter
|
|
50
50
|
|
51
51
|
@markup = markup || RDoc::Markup.new
|
52
52
|
@am = @markup.attribute_manager
|
53
|
-
@am.
|
53
|
+
@am.add_regexp_handling(/<br>/, :HARD_BREAK)
|
54
54
|
|
55
55
|
@attributes = @am.attributes
|
56
56
|
|
@@ -78,23 +78,24 @@ class RDoc::Markup::Formatter
|
|
78
78
|
end
|
79
79
|
|
80
80
|
##
|
81
|
-
# Adds a
|
81
|
+
# Adds a regexp handling for links of the form rdoc-...:
|
82
82
|
|
83
|
-
def
|
84
|
-
@markup.
|
83
|
+
def add_regexp_handling_RDOCLINK
|
84
|
+
@markup.add_regexp_handling(/rdoc-[a-z]+:[^\s\]]+/, :RDOCLINK)
|
85
85
|
end
|
86
86
|
|
87
87
|
##
|
88
|
-
# Adds a
|
88
|
+
# Adds a regexp handling for links of the form {<text>}[<url>] and
|
89
|
+
# <word>[<url>]
|
89
90
|
|
90
|
-
def
|
91
|
-
@markup.
|
92
|
-
|
93
|
-
|
94
|
-
|
91
|
+
def add_regexp_handling_TIDYLINK
|
92
|
+
@markup.add_regexp_handling(/(?:
|
93
|
+
\{[^{}]*\} | # multi-word label
|
94
|
+
\b[^\s{}]+? # single-word label
|
95
|
+
)
|
95
96
|
|
96
|
-
|
97
|
-
|
97
|
+
\[\S+?\] # link target
|
98
|
+
/x, :TIDYLINK)
|
98
99
|
end
|
99
100
|
|
100
101
|
##
|
@@ -133,8 +134,8 @@ class RDoc::Markup::Formatter
|
|
133
134
|
when RDoc::Markup::AttrChanger then
|
134
135
|
off_tags res, item
|
135
136
|
on_tags res, item
|
136
|
-
when RDoc::Markup::
|
137
|
-
res <<
|
137
|
+
when RDoc::Markup::RegexpHandling then
|
138
|
+
res << convert_regexp_handling(item)
|
138
139
|
else
|
139
140
|
raise "Unknown flow element: #{item.inspect}"
|
140
141
|
end
|
@@ -144,29 +145,29 @@ class RDoc::Markup::Formatter
|
|
144
145
|
end
|
145
146
|
|
146
147
|
##
|
147
|
-
# Converts added
|
148
|
+
# Converts added regexp handlings. See RDoc::Markup#add_regexp_handling
|
148
149
|
|
149
|
-
def
|
150
|
-
return
|
150
|
+
def convert_regexp_handling target
|
151
|
+
return target.text if in_tt?
|
151
152
|
|
152
153
|
handled = false
|
153
154
|
|
154
|
-
@attributes.each_name_of
|
155
|
-
method_name = "
|
155
|
+
@attributes.each_name_of target.type do |name|
|
156
|
+
method_name = "handle_regexp_#{name}"
|
156
157
|
|
157
158
|
if respond_to? method_name then
|
158
|
-
|
159
|
+
target.text = public_send method_name, target
|
159
160
|
handled = true
|
160
161
|
end
|
161
162
|
end
|
162
163
|
|
163
164
|
unless handled then
|
164
|
-
|
165
|
+
target_name = @attributes.as_string target.type
|
165
166
|
|
166
|
-
raise RDoc::Error, "Unhandled
|
167
|
+
raise RDoc::Error, "Unhandled regexp handling #{target_name}: #{target}"
|
167
168
|
end
|
168
169
|
|
169
|
-
|
170
|
+
target.text
|
170
171
|
end
|
171
172
|
|
172
173
|
##
|
@@ -194,18 +195,20 @@ class RDoc::Markup::Formatter
|
|
194
195
|
@in_tt > 0
|
195
196
|
end
|
196
197
|
|
198
|
+
def tt_tag? attr_mask, reverse = false
|
199
|
+
each_attr_tag(attr_mask, reverse) do |tag|
|
200
|
+
return true if tt? tag
|
201
|
+
end
|
202
|
+
false
|
203
|
+
end
|
204
|
+
|
197
205
|
##
|
198
206
|
# Turns on tags for +item+ on +res+
|
199
207
|
|
200
208
|
def on_tags res, item
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
@attr_tags.each do |tag|
|
205
|
-
if attr_mask & tag.bit != 0 then
|
206
|
-
res << annotate(tag.on)
|
207
|
-
@in_tt += 1 if tt? tag
|
208
|
-
end
|
209
|
+
each_attr_tag(item.turn_on) do |tag|
|
210
|
+
res << annotate(tag.on)
|
211
|
+
@in_tt += 1 if tt? tag
|
209
212
|
end
|
210
213
|
end
|
211
214
|
|
@@ -213,13 +216,18 @@ class RDoc::Markup::Formatter
|
|
213
216
|
# Turns off tags for +item+ on +res+
|
214
217
|
|
215
218
|
def off_tags res, item
|
216
|
-
|
219
|
+
each_attr_tag(item.turn_off, true) do |tag|
|
220
|
+
@in_tt -= 1 if tt? tag
|
221
|
+
res << annotate(tag.off)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def each_attr_tag attr_mask, reverse = false
|
217
226
|
return if attr_mask.zero?
|
218
227
|
|
219
|
-
@attr_tags.reverse_each do |tag|
|
228
|
+
@attr_tags.public_send(reverse ? :reverse_each : :each) do |tag|
|
220
229
|
if attr_mask & tag.bit != 0 then
|
221
|
-
|
222
|
-
res << annotate(tag.off)
|
230
|
+
yield tag
|
223
231
|
end
|
224
232
|
end
|
225
233
|
end
|
@@ -262,4 +270,3 @@ class RDoc::Markup::Formatter
|
|
262
270
|
end
|
263
271
|
|
264
272
|
end
|
265
|
-
|
data/lib/rdoc/markup/heading.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# A heading with a level (1-6) and text
|
4
4
|
|
@@ -23,12 +23,12 @@ RDoc::Markup::Heading =
|
|
23
23
|
return @to_html if @to_html
|
24
24
|
|
25
25
|
markup = RDoc::Markup.new
|
26
|
-
markup.
|
26
|
+
markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
|
27
27
|
|
28
28
|
@to_html = RDoc::Markup::ToHtml.new nil
|
29
29
|
|
30
|
-
def @to_html.
|
31
|
-
|
30
|
+
def @to_html.handle_regexp_CROSSREF target
|
31
|
+
target.text.sub(/^\\/, '')
|
32
32
|
end
|
33
33
|
|
34
34
|
@to_html
|
@@ -66,7 +66,13 @@ RDoc::Markup::Heading =
|
|
66
66
|
# element.
|
67
67
|
|
68
68
|
def plain_html
|
69
|
-
self.
|
69
|
+
text = self.text.dup
|
70
|
+
|
71
|
+
if matched = text.match(/rdoc-image:[^:]+:(.*)/)
|
72
|
+
text = matched[1]
|
73
|
+
end
|
74
|
+
|
75
|
+
self.class.to_html.to_html(text)
|
70
76
|
end
|
71
77
|
|
72
78
|
def pretty_print q # :nodoc:
|
@@ -76,4 +82,3 @@ RDoc::Markup::Heading =
|
|
76
82
|
end
|
77
83
|
|
78
84
|
end
|
79
|
-
|
data/lib/rdoc/markup/include.rb
CHANGED
data/lib/rdoc/markup/list.rb
CHANGED