rdoc 5.1.0 → 6.3.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rdoc might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/CONTRIBUTING.rdoc +4 -4
- data/Gemfile +9 -0
- data/History.rdoc +4 -4
- data/README.rdoc +5 -6
- data/Rakefile +35 -67
- data/lib/rdoc/alias.rb +1 -1
- data/lib/rdoc/anon_class.rb +1 -1
- data/lib/rdoc/any_method.rb +59 -15
- data/lib/rdoc/attr.rb +1 -1
- data/lib/rdoc/class_module.rb +5 -3
- data/lib/rdoc/code_object.rb +2 -9
- data/lib/rdoc/code_objects.rb +1 -1
- data/lib/rdoc/comment.rb +32 -11
- data/lib/rdoc/constant.rb +3 -3
- data/lib/rdoc/context/section.rb +1 -14
- data/lib/rdoc/context.rb +63 -20
- data/lib/rdoc/cross_reference.rb +33 -15
- data/lib/rdoc/encoding.rb +58 -30
- data/lib/rdoc/erb_partial.rb +2 -2
- data/lib/rdoc/erbio.rb +8 -4
- data/lib/rdoc/extend.rb +1 -1
- data/lib/rdoc/generator/darkfish.rb +60 -29
- data/lib/rdoc/generator/json_index.rb +6 -3
- data/lib/rdoc/generator/markup.rb +3 -13
- data/lib/rdoc/generator/pot/message_extractor.rb +1 -1
- data/lib/rdoc/generator/pot/po.rb +3 -3
- data/lib/rdoc/generator/pot/po_entry.rb +11 -11
- data/lib/rdoc/generator/pot.rb +4 -4
- data/lib/rdoc/generator/ri.rb +1 -1
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +9 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +2 -2
- 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 +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/class.rhtml +45 -47
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +55 -6
- data/lib/rdoc/generator/template/darkfish/index.rhtml +3 -4
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +22 -99
- data/lib/rdoc/generator/template/darkfish/js/search.js +32 -31
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +15 -16
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +16 -16
- data/lib/rdoc/generator/template/json_index/js/navigation.js +4 -41
- data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
- data/lib/rdoc/generator.rb +1 -1
- data/lib/rdoc/ghost_method.rb +1 -1
- data/lib/rdoc/i18n/locale.rb +1 -1
- data/lib/rdoc/i18n/text.rb +5 -5
- data/lib/rdoc/i18n.rb +3 -3
- data/lib/rdoc/include.rb +1 -1
- data/lib/rdoc/known_classes.rb +1 -1
- data/lib/rdoc/markdown/entities.rb +1 -1
- data/lib/rdoc/markdown/literals.kpeg +1 -0
- data/lib/rdoc/markdown/literals.rb +19 -7
- data/lib/rdoc/markdown.kpeg +92 -44
- data/lib/rdoc/markdown.rb +1171 -610
- data/lib/rdoc/markup/attr_changer.rb +1 -1
- data/lib/rdoc/markup/attr_span.rb +9 -3
- data/lib/rdoc/markup/attribute_manager.rb +115 -50
- data/lib/rdoc/markup/attributes.rb +7 -7
- data/lib/rdoc/markup/blank_line.rb +1 -1
- data/lib/rdoc/markup/block_quote.rb +1 -1
- data/lib/rdoc/markup/document.rb +1 -1
- data/lib/rdoc/markup/formatter.rb +25 -24
- data/lib/rdoc/markup/hard_break.rb +1 -1
- data/lib/rdoc/markup/heading.rb +4 -4
- data/lib/rdoc/markup/include.rb +1 -1
- data/lib/rdoc/markup/indented_paragraph.rb +1 -1
- data/lib/rdoc/markup/list.rb +1 -1
- data/lib/rdoc/markup/list_item.rb +1 -1
- data/lib/rdoc/markup/paragraph.rb +1 -1
- data/lib/rdoc/markup/parser.rb +79 -47
- data/lib/rdoc/markup/pre_process.rb +11 -6
- data/lib/rdoc/markup/raw.rb +1 -1
- data/lib/rdoc/markup/regexp_handling.rb +41 -0
- data/lib/rdoc/markup/rule.rb +1 -1
- data/lib/rdoc/markup/to_ansi.rb +1 -1
- data/lib/rdoc/markup/to_bs.rb +4 -4
- data/lib/rdoc/markup/to_html.rb +68 -26
- data/lib/rdoc/markup/to_html_crossref.rb +41 -26
- data/lib/rdoc/markup/to_html_snippet.rb +10 -10
- data/lib/rdoc/markup/to_joined_paragraph.rb +7 -32
- data/lib/rdoc/markup/to_label.rb +10 -10
- data/lib/rdoc/markup/to_markdown.rb +9 -9
- data/lib/rdoc/markup/to_rdoc.rb +35 -7
- data/lib/rdoc/markup/to_table_of_contents.rb +2 -1
- data/lib/rdoc/markup/to_test.rb +1 -1
- data/lib/rdoc/markup/to_tt_only.rb +3 -3
- data/lib/rdoc/markup/verbatim.rb +1 -1
- data/lib/rdoc/markup.rb +14 -17
- data/lib/rdoc/meta_method.rb +1 -1
- data/lib/rdoc/method_attr.rb +2 -2
- data/lib/rdoc/mixin.rb +1 -1
- data/lib/rdoc/normal_class.rb +3 -3
- data/lib/rdoc/normal_module.rb +1 -1
- data/lib/rdoc/options.rb +79 -21
- data/lib/rdoc/parser/c.rb +147 -194
- data/lib/rdoc/parser/changelog.rb +150 -19
- data/lib/rdoc/parser/markdown.rb +1 -1
- data/lib/rdoc/parser/rd.rb +1 -1
- data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
- data/lib/rdoc/parser/ruby.rb +632 -466
- data/lib/rdoc/parser/ruby_tools.rb +33 -34
- data/lib/rdoc/parser/simple.rb +3 -3
- data/lib/rdoc/parser/text.rb +1 -1
- data/lib/rdoc/parser.rb +9 -34
- data/lib/rdoc/rd/block_parser.rb +47 -46
- data/lib/rdoc/rd/block_parser.ry +2 -2
- data/lib/rdoc/rd/inline.rb +5 -5
- data/lib/rdoc/rd/inline_parser.rb +139 -138
- data/lib/rdoc/rd/inline_parser.ry +1 -1
- data/lib/rdoc/rd.rb +1 -1
- data/lib/rdoc/rdoc.rb +54 -41
- data/lib/rdoc/require.rb +1 -1
- data/lib/rdoc/ri/driver.rb +132 -42
- data/lib/rdoc/ri/formatter.rb +1 -1
- data/lib/rdoc/ri/paths.rb +4 -18
- data/lib/rdoc/ri/store.rb +1 -1
- data/lib/rdoc/ri/task.rb +2 -2
- data/lib/rdoc/ri.rb +1 -1
- data/lib/rdoc/rubygems_hook.rb +3 -3
- data/lib/rdoc/servlet.rb +21 -12
- data/lib/rdoc/single_class.rb +1 -1
- data/lib/rdoc/stats/normal.rb +24 -18
- data/lib/rdoc/stats/quiet.rb +1 -1
- data/lib/rdoc/stats/verbose.rb +1 -1
- data/lib/rdoc/stats.rb +1 -1
- data/lib/rdoc/store.rb +38 -27
- data/lib/rdoc/task.rb +2 -2
- data/lib/rdoc/text.rb +16 -21
- data/lib/rdoc/token_stream.rb +56 -33
- data/lib/rdoc/tom_doc.rb +17 -12
- data/lib/rdoc/top_level.rb +9 -3
- data/lib/rdoc/version.rb +8 -0
- data/lib/rdoc.rb +24 -10
- data/man/ri.1 +247 -0
- data/rdoc.gemspec +206 -15
- metadata +15 -64
- data/.document +0 -5
- data/.gitignore +0 -13
- data/.travis.yml +0 -24
- data/lib/gauntlet_rdoc.rb +0 -82
- data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
- 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/lib/rdoc/markup/parser.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
require 'strscan'
|
3
3
|
|
4
4
|
##
|
@@ -9,8 +9,9 @@ require 'strscan'
|
|
9
9
|
# RDoc::Markup::ToHTML.
|
10
10
|
#
|
11
11
|
# The parser only handles the block-level constructs Paragraph, List,
|
12
|
-
# ListItem, Heading, Verbatim, BlankLine and
|
13
|
-
# <tt>\+blah\+</tt> is handled separately by
|
12
|
+
# ListItem, Heading, Verbatim, BlankLine, Rule and BlockQuote.
|
13
|
+
# Inline markup such as <tt>\+blah\+</tt> is handled separately by
|
14
|
+
# RDoc::Markup::AttributeManager.
|
14
15
|
#
|
15
16
|
# To see what markup the Parser implements read RDoc. To see how to use
|
16
17
|
# RDoc markup to format text in your program read RDoc::Markup.
|
@@ -79,10 +80,6 @@ class RDoc::Markup::Parser
|
|
79
80
|
@binary_input = nil
|
80
81
|
@current_token = nil
|
81
82
|
@debug = false
|
82
|
-
@input = nil
|
83
|
-
@input_encoding = nil
|
84
|
-
@line = 0
|
85
|
-
@line_pos = 0
|
86
83
|
@s = nil
|
87
84
|
@tokens = []
|
88
85
|
end
|
@@ -249,7 +246,7 @@ class RDoc::Markup::Parser
|
|
249
246
|
|
250
247
|
min_indent = nil
|
251
248
|
generate_leading_spaces = true
|
252
|
-
line = ''
|
249
|
+
line = ''.dup
|
253
250
|
|
254
251
|
until @tokens.empty? do
|
255
252
|
type, data, column, = get
|
@@ -257,7 +254,7 @@ class RDoc::Markup::Parser
|
|
257
254
|
if type == :NEWLINE then
|
258
255
|
line << data
|
259
256
|
verbatim << line
|
260
|
-
line = ''
|
257
|
+
line = ''.dup
|
261
258
|
generate_leading_spaces = true
|
262
259
|
next
|
263
260
|
end
|
@@ -318,13 +315,6 @@ class RDoc::Markup::Parser
|
|
318
315
|
verbatim
|
319
316
|
end
|
320
317
|
|
321
|
-
##
|
322
|
-
# The character offset for the input string at the given +byte_offset+
|
323
|
-
|
324
|
-
def char_pos byte_offset
|
325
|
-
@input.byteslice(0, byte_offset).length
|
326
|
-
end
|
327
|
-
|
328
318
|
##
|
329
319
|
# Pulls the next token from the stream.
|
330
320
|
|
@@ -381,6 +371,17 @@ class RDoc::Markup::Parser
|
|
381
371
|
when :TEXT then
|
382
372
|
unget
|
383
373
|
parse_text parent, indent
|
374
|
+
when :BLOCKQUOTE then
|
375
|
+
type, _, column = get
|
376
|
+
if type == :NEWLINE
|
377
|
+
type, _, column = get
|
378
|
+
end
|
379
|
+
unget if type
|
380
|
+
bq = RDoc::Markup::BlockQuote.new
|
381
|
+
p :blockquote_start => [data, column] if @debug
|
382
|
+
parse bq, column
|
383
|
+
p :blockquote_end => indent if @debug
|
384
|
+
parent << bq
|
384
385
|
when *LIST_TOKENS then
|
385
386
|
unget
|
386
387
|
parent << build_list(indent)
|
@@ -412,15 +413,53 @@ class RDoc::Markup::Parser
|
|
412
413
|
token
|
413
414
|
end
|
414
415
|
|
416
|
+
##
|
417
|
+
# A simple wrapper of StringScanner that is aware of the current column and lineno
|
418
|
+
|
419
|
+
class MyStringScanner
|
420
|
+
def initialize(input)
|
421
|
+
@line = @column = 0
|
422
|
+
@s = StringScanner.new input
|
423
|
+
end
|
424
|
+
|
425
|
+
def scan(re)
|
426
|
+
ret = @s.scan(re)
|
427
|
+
@column += ret.length if ret
|
428
|
+
ret
|
429
|
+
end
|
430
|
+
|
431
|
+
def unscan(s)
|
432
|
+
@s.pos -= s.bytesize
|
433
|
+
@column -= s.length
|
434
|
+
end
|
435
|
+
|
436
|
+
def pos
|
437
|
+
[@column, @line]
|
438
|
+
end
|
439
|
+
|
440
|
+
def newline!
|
441
|
+
@column = 0
|
442
|
+
@line += 1
|
443
|
+
end
|
444
|
+
|
445
|
+
def eos?
|
446
|
+
@s.eos?
|
447
|
+
end
|
448
|
+
|
449
|
+
def matched
|
450
|
+
@s.matched
|
451
|
+
end
|
452
|
+
|
453
|
+
def [](i)
|
454
|
+
@s[i]
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
415
458
|
##
|
416
459
|
# Creates the StringScanner
|
417
460
|
|
418
461
|
def setup_scanner input
|
419
|
-
@
|
420
|
-
@line_pos = 0
|
421
|
-
@input = input.dup
|
422
|
-
|
423
|
-
@s = StringScanner.new input
|
462
|
+
@s = MyStringScanner.new input
|
424
463
|
end
|
425
464
|
|
426
465
|
##
|
@@ -455,31 +494,30 @@ class RDoc::Markup::Parser
|
|
455
494
|
@tokens << case
|
456
495
|
# [CR]LF => :NEWLINE
|
457
496
|
when @s.scan(/\r?\n/) then
|
458
|
-
token = [:NEWLINE, @s.matched, *
|
459
|
-
@
|
460
|
-
@line += 1
|
497
|
+
token = [:NEWLINE, @s.matched, *pos]
|
498
|
+
@s.newline!
|
461
499
|
token
|
462
500
|
# === text => :HEADER then :TEXT
|
463
501
|
when @s.scan(/(=+)(\s*)/) then
|
464
502
|
level = @s[1].length
|
465
|
-
header = [:HEADER, level, *
|
503
|
+
header = [:HEADER, level, *pos]
|
466
504
|
|
467
505
|
if @s[2] =~ /^\r?\n/ then
|
468
|
-
@s.
|
506
|
+
@s.unscan(@s[2])
|
469
507
|
header
|
470
508
|
else
|
471
509
|
pos = @s.pos
|
472
510
|
@s.scan(/.*/)
|
473
511
|
@tokens << header
|
474
|
-
[:TEXT, @s.matched.sub(/\r$/, ''), *
|
512
|
+
[:TEXT, @s.matched.sub(/\r$/, ''), *pos]
|
475
513
|
end
|
476
514
|
# --- (at least 3) and nothing else on the line => :RULE
|
477
515
|
when @s.scan(/(-{3,}) *\r?$/) then
|
478
|
-
[:RULE, @s[1].length - 2, *
|
516
|
+
[:RULE, @s[1].length - 2, *pos]
|
479
517
|
# * or - followed by white space and text => :BULLET
|
480
518
|
when @s.scan(/([*-]) +(\S)/) then
|
481
|
-
@s.
|
482
|
-
[:BULLET, @s[1], *
|
519
|
+
@s.unscan(@s[2])
|
520
|
+
[:BULLET, @s[1], *pos]
|
483
521
|
# A. text, a. text, 12. text => :UALPHA, :LALPHA, :NUMBER
|
484
522
|
when @s.scan(/([a-z]|\d+)\. +(\S)/i) then
|
485
523
|
# FIXME if tab(s), the column will be wrong
|
@@ -488,7 +526,7 @@ class RDoc::Markup::Parser
|
|
488
526
|
# before (and provide a check for that at least in debug
|
489
527
|
# mode)
|
490
528
|
list_label = @s[1]
|
491
|
-
@s.
|
529
|
+
@s.unscan(@s[2])
|
492
530
|
list_type =
|
493
531
|
case list_label
|
494
532
|
when /[a-z]/ then :LALPHA
|
@@ -497,20 +535,24 @@ class RDoc::Markup::Parser
|
|
497
535
|
else
|
498
536
|
raise ParseError, "BUG token #{list_label}"
|
499
537
|
end
|
500
|
-
[list_type, list_label, *
|
538
|
+
[list_type, list_label, *pos]
|
501
539
|
# [text] followed by spaces or end of line => :LABEL
|
502
540
|
when @s.scan(/\[(.*?)\]( +|\r?$)/) then
|
503
|
-
[:LABEL, @s[1], *
|
541
|
+
[:LABEL, @s[1], *pos]
|
504
542
|
# text:: followed by spaces or end of line => :NOTE
|
505
543
|
when @s.scan(/(.*?)::( +|\r?$)/) then
|
506
|
-
[:NOTE, @s[1], *
|
544
|
+
[:NOTE, @s[1], *pos]
|
545
|
+
# >>> followed by end of line => :BLOCKQUOTE
|
546
|
+
when @s.scan(/>>> *(\w+)?$/) then
|
547
|
+
[:BLOCKQUOTE, @s[1], *pos]
|
507
548
|
# anything else: :TEXT
|
508
|
-
else
|
509
|
-
|
549
|
+
else
|
550
|
+
@s.scan(/(.*?)( )?\r?$/)
|
551
|
+
token = [:TEXT, @s[1], *pos]
|
510
552
|
|
511
553
|
if @s[2] then
|
512
554
|
@tokens << token
|
513
|
-
[:BREAK, @s[2],
|
555
|
+
[:BREAK, @s[2], pos[0] + @s[1].length, pos[1]]
|
514
556
|
else
|
515
557
|
token
|
516
558
|
end
|
@@ -520,16 +562,6 @@ class RDoc::Markup::Parser
|
|
520
562
|
self
|
521
563
|
end
|
522
564
|
|
523
|
-
##
|
524
|
-
# Calculates the column (by character) and line of the current token based
|
525
|
-
# on +byte_offset+.
|
526
|
-
|
527
|
-
def token_pos byte_offset
|
528
|
-
offset = char_pos byte_offset
|
529
|
-
|
530
|
-
[offset - @line_pos, @line]
|
531
|
-
end
|
532
|
-
|
533
565
|
##
|
534
566
|
# Returns the current token to the token stream
|
535
567
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# Handle common directives that can occur in a block of text:
|
4
4
|
#
|
@@ -105,7 +105,7 @@ class RDoc::Markup::PreProcess
|
|
105
105
|
# regexp helper (square brackets for optional)
|
106
106
|
# $1 $2 $3 $4 $5
|
107
107
|
# [prefix][\]:directive:[spaces][param]newline
|
108
|
-
text.gsub
|
108
|
+
text = text.gsub(/^([ \t]*(?:#|\/?\*)?[ \t]*)(\\?):(\w+):([ \t]*)(.+)?(\r?\n|$)/) do
|
109
109
|
# skip something like ':toto::'
|
110
110
|
next $& if $4.empty? and $5 and $5[0, 1] == ':'
|
111
111
|
|
@@ -123,7 +123,11 @@ class RDoc::Markup::PreProcess
|
|
123
123
|
handle_directive $1, $3, $5, code_object, text.encoding, &block
|
124
124
|
end
|
125
125
|
|
126
|
-
comment
|
126
|
+
if comment then
|
127
|
+
comment.text = text
|
128
|
+
else
|
129
|
+
comment = text
|
130
|
+
end
|
127
131
|
|
128
132
|
self.class.post_processors.each do |handler|
|
129
133
|
handler.call comment, code_object
|
@@ -150,7 +154,7 @@ class RDoc::Markup::PreProcess
|
|
150
154
|
|
151
155
|
case directive
|
152
156
|
when 'arg', 'args' then
|
153
|
-
return "#{prefix}:#{directive}: #{param}\n" unless code_object
|
157
|
+
return "#{prefix}:#{directive}: #{param}\n" unless code_object && code_object.kind_of?(RDoc::AnyMethod)
|
154
158
|
|
155
159
|
code_object.params = param
|
156
160
|
|
@@ -174,7 +178,7 @@ class RDoc::Markup::PreProcess
|
|
174
178
|
|
175
179
|
blankline
|
176
180
|
when 'include' then
|
177
|
-
filename = param.split.first
|
181
|
+
filename = param.split(' ', 2).first
|
178
182
|
include_file filename, prefix, encoding
|
179
183
|
when 'main' then
|
180
184
|
@options.main_page = param if @options.respond_to? :main_page
|
@@ -212,7 +216,7 @@ class RDoc::Markup::PreProcess
|
|
212
216
|
when 'yield', 'yields' then
|
213
217
|
return blankline unless code_object
|
214
218
|
# remove parameter &block
|
215
|
-
code_object.params.sub
|
219
|
+
code_object.params = code_object.params.sub(/,?\s*&\w+/, '') if code_object.params
|
216
220
|
|
217
221
|
code_object.block_params = param
|
218
222
|
|
@@ -262,6 +266,7 @@ class RDoc::Markup::PreProcess
|
|
262
266
|
end
|
263
267
|
|
264
268
|
content = RDoc::Encoding.read_file full_name, encoding, true
|
269
|
+
content = RDoc::Encoding.remove_magic_comment content
|
265
270
|
|
266
271
|
# strip magic comment
|
267
272
|
content = content.sub(/\A# .*coding[=:].*$/, '').lstrip
|
data/lib/rdoc/markup/raw.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
##
|
3
|
+
# Hold details of a regexp handling sequence
|
4
|
+
|
5
|
+
class RDoc::Markup::RegexpHandling
|
6
|
+
|
7
|
+
##
|
8
|
+
# Regexp handling type
|
9
|
+
|
10
|
+
attr_reader :type
|
11
|
+
|
12
|
+
##
|
13
|
+
# Regexp handling text
|
14
|
+
|
15
|
+
attr_accessor :text
|
16
|
+
|
17
|
+
##
|
18
|
+
# Creates a new regexp handling sequence of +type+ with +text+
|
19
|
+
|
20
|
+
def initialize(type, text)
|
21
|
+
@type, @text = type, text
|
22
|
+
end
|
23
|
+
|
24
|
+
##
|
25
|
+
# Regexp handlings are equal when the have the same text and type
|
26
|
+
|
27
|
+
def ==(o)
|
28
|
+
self.text == o.text && self.type == o.type
|
29
|
+
end
|
30
|
+
|
31
|
+
def inspect # :nodoc:
|
32
|
+
"#<RDoc::Markup::RegexpHandling:0x%x @type=%p, @text=%p>" % [
|
33
|
+
object_id, @type, text.dump]
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_s # :nodoc:
|
37
|
+
"RegexpHandling: type=#{type} text=#{text.dump}"
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
data/lib/rdoc/markup/rule.rb
CHANGED
data/lib/rdoc/markup/to_ansi.rb
CHANGED
data/lib/rdoc/markup/to_bs.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# Outputs RDoc markup with hot backspace action! You will probably need a
|
4
4
|
# pager to use this output format.
|
@@ -41,7 +41,7 @@ class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc
|
|
41
41
|
end
|
42
42
|
|
43
43
|
##
|
44
|
-
# Turns on or off
|
44
|
+
# Turns on or off regexp handling for +convert_string+
|
45
45
|
|
46
46
|
def annotate tag
|
47
47
|
case tag
|
@@ -54,9 +54,9 @@ class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc
|
|
54
54
|
end
|
55
55
|
|
56
56
|
##
|
57
|
-
# Calls convert_string on the result of
|
57
|
+
# Calls convert_string on the result of convert_regexp_handling
|
58
58
|
|
59
|
-
def
|
59
|
+
def convert_regexp_handling target
|
60
60
|
convert_string super
|
61
61
|
end
|
62
62
|
|
data/lib/rdoc/markup/to_html.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
require 'cgi'
|
3
3
|
|
4
4
|
##
|
@@ -52,19 +52,32 @@ 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
|
+
##
|
65
|
+
# Adds regexp handlings.
|
66
|
+
|
67
|
+
def init_regexp_handlings
|
68
|
+
# external links
|
69
|
+
@markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)\S+\w/,
|
70
|
+
:HYPERLINK)
|
71
|
+
init_link_notation_regexp_handlings
|
72
|
+
end
|
73
|
+
|
74
|
+
##
|
75
|
+
# Adds regexp handlings about link notations.
|
76
|
+
|
77
|
+
def init_link_notation_regexp_handlings
|
78
|
+
add_regexp_handling_RDOCLINK
|
79
|
+
add_regexp_handling_TIDYLINK
|
80
|
+
end
|
68
81
|
|
69
82
|
def handle_RDOCLINK url # :nodoc:
|
70
83
|
case url
|
@@ -91,14 +104,14 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
91
104
|
end
|
92
105
|
|
93
106
|
##
|
94
|
-
# +
|
107
|
+
# +target+ is a <code><br></code>
|
95
108
|
|
96
|
-
def
|
109
|
+
def handle_regexp_HARD_BREAK target
|
97
110
|
'<br>'
|
98
111
|
end
|
99
112
|
|
100
113
|
##
|
101
|
-
# +
|
114
|
+
# +target+ is a potential link. The following schemes are handled:
|
102
115
|
#
|
103
116
|
# <tt>mailto:</tt>::
|
104
117
|
# Inserted as-is.
|
@@ -109,14 +122,14 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
109
122
|
# <tt>link:</tt>::
|
110
123
|
# Reference to a local file relative to the output directory.
|
111
124
|
|
112
|
-
def
|
113
|
-
url =
|
125
|
+
def handle_regexp_HYPERLINK(target)
|
126
|
+
url = target.text
|
114
127
|
|
115
128
|
gen_url url, url
|
116
129
|
end
|
117
130
|
|
118
131
|
##
|
119
|
-
# +
|
132
|
+
# +target+ is an rdoc-schemed link that will be converted into a hyperlink.
|
120
133
|
#
|
121
134
|
# For the +rdoc-ref+ scheme the named reference will be returned without
|
122
135
|
# creating a link.
|
@@ -124,16 +137,16 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
124
137
|
# For the +rdoc-label+ scheme the footnote and label prefixes are stripped
|
125
138
|
# when creating a link. All other contents will be linked verbatim.
|
126
139
|
|
127
|
-
def
|
128
|
-
handle_RDOCLINK
|
140
|
+
def handle_regexp_RDOCLINK target
|
141
|
+
handle_RDOCLINK target.text
|
129
142
|
end
|
130
143
|
|
131
144
|
##
|
132
|
-
# This +
|
145
|
+
# This +target+ is a link where the label is different from the URL
|
133
146
|
# <tt>label[url]</tt> or <tt>{long label}[url]</tt>
|
134
147
|
|
135
|
-
def
|
136
|
-
text =
|
148
|
+
def handle_regexp_TIDYLINK(target)
|
149
|
+
text = target.text
|
137
150
|
|
138
151
|
return text unless
|
139
152
|
text =~ /^\{(.*)\}\[(.*?)\]$/ or text =~ /^(\S+)\[(.*?)\]$/
|
@@ -186,7 +199,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
186
199
|
@res << "\n<p>"
|
187
200
|
text = paragraph.text @hard_break
|
188
201
|
text = text.gsub(/\r?\n/, ' ')
|
189
|
-
@res <<
|
202
|
+
@res << to_html(text)
|
190
203
|
@res << "</p>\n"
|
191
204
|
end
|
192
205
|
|
@@ -200,11 +213,13 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
200
213
|
|
201
214
|
content = if verbatim.ruby? or parseable? text then
|
202
215
|
begin
|
203
|
-
tokens = RDoc::
|
216
|
+
tokens = RDoc::Parser::RipperStateLex.parse text
|
204
217
|
klass = ' class="ruby"'
|
205
218
|
|
206
|
-
RDoc::TokenStream.to_html tokens
|
207
|
-
|
219
|
+
result = RDoc::TokenStream.to_html tokens
|
220
|
+
result = result + "\n" unless "\n" == result[-1]
|
221
|
+
result
|
222
|
+
rescue
|
208
223
|
CGI.escapeHTML text
|
209
224
|
end
|
210
225
|
else
|
@@ -212,7 +227,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
212
227
|
end
|
213
228
|
|
214
229
|
if @options.pipe then
|
215
|
-
@res << "\n<pre><code>#{CGI.escapeHTML text}</code></pre>\n"
|
230
|
+
@res << "\n<pre><code>#{CGI.escapeHTML text}\n</code></pre>\n"
|
216
231
|
else
|
217
232
|
@res << "\n<pre#{klass}>#{content}</pre>\n"
|
218
233
|
end
|
@@ -299,6 +314,29 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
299
314
|
@res << raw.parts.join("\n")
|
300
315
|
end
|
301
316
|
|
317
|
+
##
|
318
|
+
# Adds +table+ to the output
|
319
|
+
|
320
|
+
def accept_table header, body, aligns
|
321
|
+
@res << "\n<table role=\"table\">\n<thead>\n<tr>\n"
|
322
|
+
header.zip(aligns) do |text, align|
|
323
|
+
@res << '<th'
|
324
|
+
@res << ' align="' << align << '"' if align
|
325
|
+
@res << '>' << CGI.escapeHTML(text) << "</th>\n"
|
326
|
+
end
|
327
|
+
@res << "</tr>\n</thead>\n<tbody>\n"
|
328
|
+
body.each do |row|
|
329
|
+
@res << "<tr>\n"
|
330
|
+
row.zip(aligns) do |text, align|
|
331
|
+
@res << '<td'
|
332
|
+
@res << ' align="' << align << '"' if align
|
333
|
+
@res << '>' << CGI.escapeHTML(text) << "</td>\n"
|
334
|
+
end
|
335
|
+
@res << "</tr>\n"
|
336
|
+
end
|
337
|
+
@res << "</tbody>\n</table>\n"
|
338
|
+
end
|
339
|
+
|
302
340
|
# :section: Utilities
|
303
341
|
|
304
342
|
##
|
@@ -310,7 +348,7 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
310
348
|
|
311
349
|
##
|
312
350
|
# Generate a link to +url+ with content +text+. Handles the special cases
|
313
|
-
# for img: and link: described under
|
351
|
+
# for img: and link: described under handle_regexp_HYPERLINK
|
314
352
|
|
315
353
|
def gen_url url, text
|
316
354
|
scheme, url, id = parse_url url
|
@@ -319,6 +357,10 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
319
357
|
url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
|
320
358
|
"<img src=\"#{url}\" />"
|
321
359
|
else
|
360
|
+
if scheme != 'link' and /\.(?:rb|rdoc|md)\z/i =~ url
|
361
|
+
url = url.sub(%r%\A([./]*)(.*)\z%) { "#$1#{$2.tr('.', '_')}.html" }
|
362
|
+
end
|
363
|
+
|
322
364
|
text = text.sub %r%^#{scheme}:/*%i, ''
|
323
365
|
text = text.sub %r%^[*\^](\d+)$%, '\1'
|
324
366
|
|