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
data/lib/rdoc/markup/to_html.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
# frozen_string_literal:
|
2
|
-
require 'cgi'
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'cgi/util'
|
3
3
|
|
4
4
|
##
|
5
5
|
# Outputs RDoc markup as HTML.
|
@@ -52,24 +52,40 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
52
52
|
@th = nil
|
53
53
|
@hard_break = "<br>\n"
|
54
54
|
|
55
|
-
|
56
|
-
@markup.add_special(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)\S+\w/,
|
57
|
-
:HYPERLINK)
|
58
|
-
|
59
|
-
add_special_RDOCLINK
|
60
|
-
add_special_TIDYLINK
|
55
|
+
init_regexp_handlings
|
61
56
|
|
62
57
|
init_tags
|
63
58
|
end
|
64
59
|
|
65
|
-
# :section:
|
60
|
+
# :section: Regexp Handling
|
66
61
|
#
|
67
|
-
# These methods
|
62
|
+
# These methods are used by regexp handling markup added by RDoc::Markup#add_regexp_handling.
|
63
|
+
|
64
|
+
# :nodoc:
|
65
|
+
URL_CHARACTERS_REGEXP_STR = /[A-Za-z0-9\-._~:\/\?#\[\]@!$&'\(\)*+,;%=]/.source
|
66
|
+
|
67
|
+
##
|
68
|
+
# Adds regexp handlings.
|
69
|
+
|
70
|
+
def init_regexp_handlings
|
71
|
+
# external links
|
72
|
+
@markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)#{URL_CHARACTERS_REGEXP_STR}+\w/,
|
73
|
+
:HYPERLINK)
|
74
|
+
init_link_notation_regexp_handlings
|
75
|
+
end
|
76
|
+
|
77
|
+
##
|
78
|
+
# Adds regexp handlings about link notations.
|
79
|
+
|
80
|
+
def init_link_notation_regexp_handlings
|
81
|
+
add_regexp_handling_RDOCLINK
|
82
|
+
add_regexp_handling_TIDYLINK
|
83
|
+
end
|
68
84
|
|
69
85
|
def handle_RDOCLINK url # :nodoc:
|
70
86
|
case url
|
71
87
|
when /^rdoc-ref:/
|
72
|
-
$'
|
88
|
+
CGI.escapeHTML($')
|
73
89
|
when /^rdoc-label:/
|
74
90
|
text = $'
|
75
91
|
|
@@ -80,25 +96,28 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
80
96
|
else text
|
81
97
|
end
|
82
98
|
|
83
|
-
gen_url url, text
|
99
|
+
gen_url CGI.escapeHTML(url), CGI.escapeHTML(text)
|
84
100
|
when /^rdoc-image:/
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
101
|
+
url, alt = $'.split(":", 2) # Split the string after "rdoc-image:" into url and alt
|
102
|
+
if alt && !alt.empty?
|
103
|
+
%[<img src="#{CGI.escapeHTML(url)}" alt="#{CGI.escapeHTML(alt)}">]
|
104
|
+
else
|
105
|
+
%[<img src="#{CGI.escapeHTML(url)}">]
|
106
|
+
end
|
107
|
+
when /\Ardoc-[a-z]+:/
|
108
|
+
CGI.escapeHTML($')
|
90
109
|
end
|
91
110
|
end
|
92
111
|
|
93
112
|
##
|
94
|
-
# +
|
113
|
+
# +target+ is a <code><br></code>
|
95
114
|
|
96
|
-
def
|
115
|
+
def handle_regexp_HARD_BREAK target
|
97
116
|
'<br>'
|
98
117
|
end
|
99
118
|
|
100
119
|
##
|
101
|
-
# +
|
120
|
+
# +target+ is a potential link. The following schemes are handled:
|
102
121
|
#
|
103
122
|
# <tt>mailto:</tt>::
|
104
123
|
# Inserted as-is.
|
@@ -109,14 +128,14 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
109
128
|
# <tt>link:</tt>::
|
110
129
|
# Reference to a local file relative to the output directory.
|
111
130
|
|
112
|
-
def
|
113
|
-
url =
|
131
|
+
def handle_regexp_HYPERLINK(target)
|
132
|
+
url = CGI.escapeHTML(target.text)
|
114
133
|
|
115
134
|
gen_url url, url
|
116
135
|
end
|
117
136
|
|
118
137
|
##
|
119
|
-
# +
|
138
|
+
# +target+ is an rdoc-schemed link that will be converted into a hyperlink.
|
120
139
|
#
|
121
140
|
# For the +rdoc-ref+ scheme the named reference will be returned without
|
122
141
|
# creating a link.
|
@@ -124,24 +143,28 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
124
143
|
# For the +rdoc-label+ scheme the footnote and label prefixes are stripped
|
125
144
|
# when creating a link. All other contents will be linked verbatim.
|
126
145
|
|
127
|
-
def
|
128
|
-
handle_RDOCLINK
|
146
|
+
def handle_regexp_RDOCLINK target
|
147
|
+
handle_RDOCLINK target.text
|
129
148
|
end
|
130
149
|
|
131
150
|
##
|
132
|
-
# This +
|
151
|
+
# This +target+ is a link where the label is different from the URL
|
133
152
|
# <tt>label[url]</tt> or <tt>{long label}[url]</tt>
|
134
153
|
|
135
|
-
def
|
136
|
-
text =
|
154
|
+
def handle_regexp_TIDYLINK(target)
|
155
|
+
text = target.text
|
137
156
|
|
138
157
|
return text unless
|
139
158
|
text =~ /^\{(.*)\}\[(.*?)\]$/ or text =~ /^(\S+)\[(.*?)\]$/
|
140
159
|
|
141
160
|
label = $1
|
142
|
-
url = $2
|
161
|
+
url = CGI.escapeHTML($2)
|
143
162
|
|
144
|
-
|
163
|
+
if /^rdoc-image:/ =~ label
|
164
|
+
label = handle_RDOCLINK(label)
|
165
|
+
else
|
166
|
+
label = CGI.escapeHTML(label)
|
167
|
+
end
|
145
168
|
|
146
169
|
gen_url url, label
|
147
170
|
end
|
@@ -185,8 +208,10 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
185
208
|
def accept_paragraph paragraph
|
186
209
|
@res << "\n<p>"
|
187
210
|
text = paragraph.text @hard_break
|
188
|
-
text = text.gsub(
|
189
|
-
|
211
|
+
text = text.gsub(/(#{SPACE_SEPARATED_LETTER_CLASS})?\K\r?\n(?=(?(1)(#{SPACE_SEPARATED_LETTER_CLASS})?))/o) {
|
212
|
+
defined?($2) && ' '
|
213
|
+
}
|
214
|
+
@res << to_html(text)
|
190
215
|
@res << "</p>\n"
|
191
216
|
end
|
192
217
|
|
@@ -200,11 +225,13 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
200
225
|
|
201
226
|
content = if verbatim.ruby? or parseable? text then
|
202
227
|
begin
|
203
|
-
tokens = RDoc::
|
228
|
+
tokens = RDoc::Parser::RipperStateLex.parse text
|
204
229
|
klass = ' class="ruby"'
|
205
230
|
|
206
|
-
RDoc::TokenStream.to_html tokens
|
207
|
-
|
231
|
+
result = RDoc::TokenStream.to_html tokens
|
232
|
+
result = result + "\n" unless "\n" == result[-1]
|
233
|
+
result
|
234
|
+
rescue
|
208
235
|
CGI.escapeHTML text
|
209
236
|
end
|
210
237
|
else
|
@@ -212,7 +239,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
212
239
|
end
|
213
240
|
|
214
241
|
if @options.pipe then
|
215
|
-
@res << "\n<pre><code>#{CGI.escapeHTML text}</code></pre>\n"
|
242
|
+
@res << "\n<pre><code>#{CGI.escapeHTML text}\n</code></pre>\n"
|
216
243
|
else
|
217
244
|
@res << "\n<pre#{klass}>#{content}</pre>\n"
|
218
245
|
end
|
@@ -299,6 +326,29 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
299
326
|
@res << raw.parts.join("\n")
|
300
327
|
end
|
301
328
|
|
329
|
+
##
|
330
|
+
# Adds +table+ to the output
|
331
|
+
|
332
|
+
def accept_table header, body, aligns
|
333
|
+
@res << "\n<table role=\"table\">\n<thead>\n<tr>\n"
|
334
|
+
header.zip(aligns) do |text, align|
|
335
|
+
@res << '<th'
|
336
|
+
@res << ' align="' << align << '"' if align
|
337
|
+
@res << '>' << to_html(text) << "</th>\n"
|
338
|
+
end
|
339
|
+
@res << "</tr>\n</thead>\n<tbody>\n"
|
340
|
+
body.each do |row|
|
341
|
+
@res << "<tr>\n"
|
342
|
+
row.zip(aligns) do |text, align|
|
343
|
+
@res << '<td'
|
344
|
+
@res << ' align="' << align << '"' if align
|
345
|
+
@res << '>' << to_html(text) << "</td>\n"
|
346
|
+
end
|
347
|
+
@res << "</tr>\n"
|
348
|
+
end
|
349
|
+
@res << "</tbody>\n</table>\n"
|
350
|
+
end
|
351
|
+
|
302
352
|
# :section: Utilities
|
303
353
|
|
304
354
|
##
|
@@ -310,7 +360,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
310
360
|
|
311
361
|
##
|
312
362
|
# Generate a link to +url+ with content +text+. Handles the special cases
|
313
|
-
# for img: and link: described under
|
363
|
+
# for img: and link: described under handle_regexp_HYPERLINK
|
314
364
|
|
315
365
|
def gen_url url, text
|
316
366
|
scheme, url, id = parse_url url
|
@@ -319,6 +369,10 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
319
369
|
url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
|
320
370
|
"<img src=\"#{url}\" />"
|
321
371
|
else
|
372
|
+
if scheme != 'link' and %r%\A((?!https?:)(?:[^/#]*/)*+)([^/#]+)\.(rb|rdoc|md)(?=\z|#)%i =~ url
|
373
|
+
url = "#$1#{$2.tr('.', '_')}_#$3.html#$'"
|
374
|
+
end
|
375
|
+
|
322
376
|
text = text.sub %r%^#{scheme}:/*%i, ''
|
323
377
|
text = text.sub %r%^[*\^](\d+)$%, '\1'
|
324
378
|
|
@@ -358,7 +412,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
358
412
|
"<li>"
|
359
413
|
when :LABEL, :NOTE then
|
360
414
|
Array(list_item.label).map do |label|
|
361
|
-
"<dt>#{to_html label}
|
415
|
+
"<dt>#{to_html label}</dt>\n"
|
362
416
|
end.join << "<dd>"
|
363
417
|
else
|
364
418
|
raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
|
@@ -384,7 +438,9 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
384
438
|
|
385
439
|
def parseable? text
|
386
440
|
verbose, $VERBOSE = $VERBOSE, nil
|
387
|
-
|
441
|
+
catch(:valid) do
|
442
|
+
eval("BEGIN { throw :valid, true }\n#{text}")
|
443
|
+
end
|
388
444
|
rescue SyntaxError
|
389
445
|
false
|
390
446
|
ensure
|
@@ -399,4 +455,3 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
399
455
|
end
|
400
456
|
|
401
457
|
end
|
402
|
-
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# Subclass of the RDoc::Markup::ToHtml class that supports looking up method
|
4
4
|
# names, classes, etc to create links. RDoc::CrossReference is used to
|
@@ -39,26 +39,38 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
39
39
|
@hyperlink_all = @options.hyperlink_all
|
40
40
|
@show_hash = @options.show_hash
|
41
41
|
|
42
|
-
crossref_re = @hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP
|
43
|
-
@markup.add_special crossref_re, :CROSSREF
|
44
|
-
|
45
42
|
@cross_reference = RDoc::CrossReference.new @context
|
46
43
|
end
|
47
44
|
|
45
|
+
# :nodoc:
|
46
|
+
def init_link_notation_regexp_handlings
|
47
|
+
add_regexp_handling_RDOCLINK
|
48
|
+
|
49
|
+
# The crossref must be linked before tidylink because Klass.method[:sym]
|
50
|
+
# will be processed as a tidylink first and will be broken.
|
51
|
+
crossref_re = @options.hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP
|
52
|
+
@markup.add_regexp_handling crossref_re, :CROSSREF
|
53
|
+
|
54
|
+
add_regexp_handling_TIDYLINK
|
55
|
+
end
|
56
|
+
|
48
57
|
##
|
49
58
|
# Creates a link to the reference +name+ if the name exists. If +text+ is
|
50
59
|
# given it is used as the link text, otherwise +name+ is used.
|
51
60
|
|
52
|
-
def cross_reference name, text = nil
|
61
|
+
def cross_reference name, text = nil, code = true, rdoc_ref: false
|
53
62
|
lookup = name
|
54
63
|
|
55
64
|
name = name[1..-1] unless @show_hash if name[0, 1] == '#'
|
56
65
|
|
57
|
-
name
|
58
|
-
|
59
|
-
|
66
|
+
if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])?@/
|
67
|
+
text ||= [CGI.unescape($'), (" at <code>#{$1}</code>" if $~.begin(1))].join("")
|
68
|
+
code = false
|
69
|
+
else
|
70
|
+
text ||= name
|
71
|
+
end
|
60
72
|
|
61
|
-
link lookup, text
|
73
|
+
link lookup, text, code, rdoc_ref: rdoc_ref
|
62
74
|
end
|
63
75
|
|
64
76
|
##
|
@@ -68,8 +80,10 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
68
80
|
# example, ToHtml is found, even without the <tt>RDoc::Markup::</tt> prefix,
|
69
81
|
# because we look for it in module Markup first.
|
70
82
|
|
71
|
-
def
|
72
|
-
name =
|
83
|
+
def handle_regexp_CROSSREF(target)
|
84
|
+
name = target.text
|
85
|
+
|
86
|
+
return name if @options.autolink_excluded_words&.include?(name)
|
73
87
|
|
74
88
|
return name if name =~ /@[\w-]+\.[\w-]/ # labels that look like emails
|
75
89
|
|
@@ -80,33 +94,38 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
80
94
|
return name if name =~ /\A[a-z]*\z/
|
81
95
|
end
|
82
96
|
|
83
|
-
cross_reference name
|
97
|
+
cross_reference name, rdoc_ref: false
|
84
98
|
end
|
85
99
|
|
86
100
|
##
|
87
101
|
# Handles <tt>rdoc-ref:</tt> scheme links and allows RDoc::Markup::ToHtml to
|
88
102
|
# handle other schemes.
|
89
103
|
|
90
|
-
def
|
91
|
-
|
104
|
+
def handle_regexp_HYPERLINK target
|
105
|
+
url = target.text
|
92
106
|
|
93
|
-
|
107
|
+
case url
|
108
|
+
when /\Ardoc-ref:/
|
109
|
+
cross_reference $', rdoc_ref: true
|
110
|
+
else
|
111
|
+
super
|
112
|
+
end
|
94
113
|
end
|
95
114
|
|
96
115
|
##
|
97
|
-
# +
|
116
|
+
# +target+ is an rdoc-schemed link that will be converted into a hyperlink.
|
98
117
|
# For the rdoc-ref scheme the cross-reference will be looked up and the
|
99
118
|
# given name will be used.
|
100
119
|
#
|
101
120
|
# All other contents are handled by
|
102
|
-
# {the superclass}[rdoc-ref:RDoc::Markup::ToHtml#
|
121
|
+
# {the superclass}[rdoc-ref:RDoc::Markup::ToHtml#handle_regexp_RDOCLINK]
|
103
122
|
|
104
|
-
def
|
105
|
-
url =
|
123
|
+
def handle_regexp_RDOCLINK target
|
124
|
+
url = target.text
|
106
125
|
|
107
126
|
case url
|
108
|
-
when /\Ardoc-ref:/
|
109
|
-
cross_reference $'
|
127
|
+
when /\Ardoc-ref:/
|
128
|
+
cross_reference $', rdoc_ref: true
|
110
129
|
else
|
111
130
|
super
|
112
131
|
end
|
@@ -117,45 +136,91 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
117
136
|
# RDoc::Markup::ToHtml to handle other schemes.
|
118
137
|
|
119
138
|
def gen_url url, text
|
120
|
-
|
121
|
-
|
122
|
-
|
139
|
+
if url =~ /\Ardoc-ref:/
|
140
|
+
name = $'
|
141
|
+
cross_reference name, text, name == text, rdoc_ref: true
|
142
|
+
else
|
143
|
+
super
|
144
|
+
end
|
123
145
|
end
|
124
146
|
|
125
147
|
##
|
126
148
|
# Creates an HTML link to +name+ with the given +text+.
|
127
149
|
|
128
|
-
def link name, text
|
129
|
-
|
130
|
-
|
131
|
-
if name =~ /(.*[^#:])@/ then
|
150
|
+
def link name, text, code = true, rdoc_ref: false
|
151
|
+
if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])?@/
|
132
152
|
name = $1
|
133
153
|
label = $'
|
134
154
|
end
|
135
155
|
|
136
|
-
ref = @cross_reference.resolve name, text
|
137
|
-
|
138
|
-
text = ref.output_name @context if
|
139
|
-
RDoc::MethodAttr === ref and text == original_name
|
156
|
+
ref = @cross_reference.resolve name, text if name
|
140
157
|
|
141
158
|
case ref
|
142
159
|
when String then
|
160
|
+
if rdoc_ref && @options.warn_missing_rdoc_ref
|
161
|
+
puts "#{@from_path}: `rdoc-ref:#{name}` can't be resolved for `#{text}`"
|
162
|
+
end
|
143
163
|
ref
|
144
164
|
else
|
145
|
-
path = ref.as_href
|
146
|
-
|
147
|
-
if
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
165
|
+
path = ref ? ref.as_href(@from_path) : +""
|
166
|
+
|
167
|
+
if code and RDoc::CodeObject === ref and !(RDoc::TopLevel === ref)
|
168
|
+
text = "<code>#{CGI.escapeHTML text}</code>"
|
169
|
+
end
|
170
|
+
|
171
|
+
if label
|
172
|
+
if path =~ /#/
|
173
|
+
path << "-label-#{label}"
|
174
|
+
elsif ref&.sections&.any? { |section| label == section.title }
|
175
|
+
path << "##{label}"
|
176
|
+
elsif ref.respond_to?(:aref)
|
177
|
+
path << "##{ref.aref}-label-#{label}"
|
178
|
+
else
|
179
|
+
path << "#label-#{label}"
|
180
|
+
end
|
181
|
+
end
|
155
182
|
|
156
183
|
"<a href=\"#{path}\">#{text}</a>"
|
157
184
|
end
|
158
185
|
end
|
159
186
|
|
160
|
-
|
187
|
+
def convert_flow(flow)
|
188
|
+
res = []
|
189
|
+
|
190
|
+
i = 0
|
191
|
+
while i < flow.size
|
192
|
+
item = flow[i]
|
193
|
+
i += 1
|
194
|
+
case item
|
195
|
+
when RDoc::Markup::AttrChanger then
|
196
|
+
# Make "+Class#method+" a cross reference
|
197
|
+
if tt_tag?(item.turn_on) and
|
198
|
+
String === (str = flow[i]) and
|
199
|
+
RDoc::Markup::AttrChanger === flow[i+1] and
|
200
|
+
tt_tag?(flow[i+1].turn_off, true) and
|
201
|
+
(@options.hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP).match?(str) and
|
202
|
+
(text = cross_reference str) != str
|
203
|
+
then
|
204
|
+
text = yield text, res if defined?(yield)
|
205
|
+
res << text
|
206
|
+
i += 2
|
207
|
+
next
|
208
|
+
end
|
209
|
+
off_tags res, item
|
210
|
+
on_tags res, item
|
211
|
+
when String then
|
212
|
+
text = convert_string(item)
|
213
|
+
text = yield text, res if defined?(yield)
|
214
|
+
res << text
|
215
|
+
when RDoc::Markup::RegexpHandling then
|
216
|
+
text = convert_regexp_handling(item)
|
217
|
+
text = yield text, res if defined?(yield)
|
218
|
+
res << text
|
219
|
+
else
|
220
|
+
raise "Unknown flow element: #{item.inspect}"
|
221
|
+
end
|
222
|
+
end
|
161
223
|
|
224
|
+
res.join('')
|
225
|
+
end
|
226
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# Outputs RDoc markup as paragraphs with inline markup only.
|
4
4
|
|
@@ -44,7 +44,7 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
|
|
44
44
|
@mask = 0
|
45
45
|
@paragraphs = 0
|
46
46
|
|
47
|
-
@markup.
|
47
|
+
@markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
|
48
48
|
end
|
49
49
|
|
50
50
|
##
|
@@ -66,12 +66,15 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
|
|
66
66
|
|
67
67
|
alias accept_rule ignore
|
68
68
|
|
69
|
+
##
|
70
|
+
# Adds +paragraph+ to the output
|
71
|
+
|
69
72
|
def accept_paragraph paragraph
|
70
73
|
para = @in_list_entry.last || "<p>"
|
71
74
|
|
72
75
|
text = paragraph.text @hard_break
|
73
76
|
|
74
|
-
@res << "#{para}#{
|
77
|
+
@res << "#{para}#{to_html text}\n"
|
75
78
|
|
76
79
|
add_paragraph
|
77
80
|
end
|
@@ -123,16 +126,16 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
|
|
123
126
|
end
|
124
127
|
|
125
128
|
##
|
126
|
-
# Removes escaping from the cross-references in +
|
129
|
+
# Removes escaping from the cross-references in +target+
|
127
130
|
|
128
|
-
def
|
129
|
-
|
131
|
+
def handle_regexp_CROSSREF target
|
132
|
+
target.text.sub(/\A\\/, '')
|
130
133
|
end
|
131
134
|
|
132
135
|
##
|
133
|
-
# +
|
136
|
+
# +target+ is a <code><br></code>
|
134
137
|
|
135
|
-
def
|
138
|
+
def handle_regexp_HARD_BREAK target
|
136
139
|
@characters -= 4
|
137
140
|
'<br>'
|
138
141
|
end
|
@@ -226,8 +229,8 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
|
|
226
229
|
when String then
|
227
230
|
text = convert_string item
|
228
231
|
res << truncate(text)
|
229
|
-
when RDoc::Markup::
|
230
|
-
text =
|
232
|
+
when RDoc::Markup::RegexpHandling then
|
233
|
+
text = convert_regexp_handling item
|
231
234
|
res << truncate(text)
|
232
235
|
else
|
233
236
|
raise "Unknown flow element: #{item.inspect}"
|
@@ -282,4 +285,3 @@ class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml
|
|
282
285
|
end
|
283
286
|
|
284
287
|
end
|
285
|
-
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# Joins the parts of an RDoc::Markup::Paragraph into a single String.
|
4
4
|
#
|
@@ -23,38 +23,12 @@ class RDoc::Markup::ToJoinedParagraph < RDoc::Markup::Formatter
|
|
23
23
|
# Converts the parts of +paragraph+ to a single entry.
|
24
24
|
|
25
25
|
def accept_paragraph paragraph
|
26
|
-
parts =
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
if String === part then
|
31
|
-
if string then
|
32
|
-
string << part
|
33
|
-
else
|
34
|
-
parts << part
|
35
|
-
string = part
|
36
|
-
end
|
37
|
-
else
|
38
|
-
parts << part
|
39
|
-
string = false
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
parts = parts.map do |part|
|
44
|
-
if String === part then
|
45
|
-
part.rstrip
|
46
|
-
else
|
47
|
-
part
|
48
|
-
end
|
26
|
+
parts = paragraph.parts.chunk do |part|
|
27
|
+
String === part
|
28
|
+
end.flat_map do |string, chunk|
|
29
|
+
string ? chunk.join.rstrip : chunk
|
49
30
|
end
|
50
31
|
|
51
|
-
# TODO use Enumerable#chunk when Ruby 1.8 support is dropped
|
52
|
-
#parts = paragraph.parts.chunk do |part|
|
53
|
-
# String === part
|
54
|
-
#end.map do |string, chunk|
|
55
|
-
# string ? chunk.join.rstrip : chunk
|
56
|
-
#end.flatten
|
57
|
-
|
58
32
|
paragraph.parts.replace parts
|
59
33
|
end
|
60
34
|
|
@@ -67,6 +41,6 @@ class RDoc::Markup::ToJoinedParagraph < RDoc::Markup::Formatter
|
|
67
41
|
alias accept_raw ignore
|
68
42
|
alias accept_rule ignore
|
69
43
|
alias accept_verbatim ignore
|
44
|
+
alias accept_table ignore
|
70
45
|
|
71
46
|
end
|
72
|
-
|
data/lib/rdoc/markup/to_label.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
# frozen_string_literal:
|
2
|
-
require 'cgi'
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'cgi/util'
|
3
3
|
|
4
4
|
##
|
5
5
|
# Creates HTML-safe labels suitable for use in id attributes. Tidylinks are
|
@@ -16,8 +16,8 @@ class RDoc::Markup::ToLabel < RDoc::Markup::Formatter
|
|
16
16
|
def initialize markup = nil
|
17
17
|
super nil, markup
|
18
18
|
|
19
|
-
@markup.
|
20
|
-
@markup.
|
19
|
+
@markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
|
20
|
+
@markup.add_regexp_handling(/(((\{.*?\})|\b\S+?)\[\S+?\])/, :TIDYLINK)
|
21
21
|
|
22
22
|
add_tag :BOLD, '', ''
|
23
23
|
add_tag :TT, '', ''
|
@@ -36,20 +36,20 @@ class RDoc::Markup::ToLabel < RDoc::Markup::Formatter
|
|
36
36
|
end
|
37
37
|
|
38
38
|
##
|
39
|
-
# Converts the CROSSREF +
|
39
|
+
# Converts the CROSSREF +target+ to plain text, removing the suppression
|
40
40
|
# marker, if any
|
41
41
|
|
42
|
-
def
|
43
|
-
text =
|
42
|
+
def handle_regexp_CROSSREF target
|
43
|
+
text = target.text
|
44
44
|
|
45
45
|
text.sub(/^\\/, '')
|
46
46
|
end
|
47
47
|
|
48
48
|
##
|
49
|
-
# Converts the TIDYLINK +
|
49
|
+
# Converts the TIDYLINK +target+ to just the text part
|
50
50
|
|
51
|
-
def
|
52
|
-
text =
|
51
|
+
def handle_regexp_TIDYLINK target
|
52
|
+
text = target.text
|
53
53
|
|
54
54
|
return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
|
55
55
|
|
@@ -68,8 +68,7 @@ class RDoc::Markup::ToLabel < RDoc::Markup::Formatter
|
|
68
68
|
alias accept_rule ignore
|
69
69
|
alias accept_verbatim ignore
|
70
70
|
alias end_accepting ignore
|
71
|
-
alias
|
71
|
+
alias handle_regexp_HARD_BREAK ignore
|
72
72
|
alias start_accepting ignore
|
73
73
|
|
74
74
|
end
|
75
|
-
|