gitlab-rdoc 6.3.2
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 +7 -0
- data/CONTRIBUTING.rdoc +220 -0
- data/CVE-2013-0256.rdoc +49 -0
- data/ExampleMarkdown.md +37 -0
- data/ExampleRDoc.rdoc +208 -0
- data/Gemfile +12 -0
- data/History.rdoc +1666 -0
- data/LEGAL.rdoc +50 -0
- data/LICENSE.rdoc +57 -0
- data/README.rdoc +133 -0
- data/RI.rdoc +57 -0
- data/Rakefile +101 -0
- data/TODO.rdoc +59 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/exe/rdoc +44 -0
- data/exe/ri +12 -0
- data/lib/rdoc/alias.rb +112 -0
- data/lib/rdoc/anon_class.rb +11 -0
- data/lib/rdoc/any_method.rb +361 -0
- data/lib/rdoc/attr.rb +176 -0
- data/lib/rdoc/class_module.rb +802 -0
- data/lib/rdoc/code_object.rb +421 -0
- data/lib/rdoc/code_objects.rb +6 -0
- data/lib/rdoc/comment.rb +250 -0
- data/lib/rdoc/constant.rb +187 -0
- data/lib/rdoc/context/section.rb +232 -0
- data/lib/rdoc/context.rb +1266 -0
- data/lib/rdoc/cross_reference.rb +202 -0
- data/lib/rdoc/encoding.rb +136 -0
- data/lib/rdoc/erb_partial.rb +19 -0
- data/lib/rdoc/erbio.rb +42 -0
- data/lib/rdoc/extend.rb +10 -0
- data/lib/rdoc/generator/darkfish.rb +790 -0
- data/lib/rdoc/generator/json_index.rb +300 -0
- data/lib/rdoc/generator/markup.rb +160 -0
- data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
- data/lib/rdoc/generator/pot/po.rb +84 -0
- data/lib/rdoc/generator/pot/po_entry.rb +141 -0
- data/lib/rdoc/generator/pot.rb +98 -0
- data/lib/rdoc/generator/ri.rb +31 -0
- data/lib/rdoc/generator/template/darkfish/.document +0 -0
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +22 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +19 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +9 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +15 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +9 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +15 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +15 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +12 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +11 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +12 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +11 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +14 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +11 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +18 -0
- data/lib/rdoc/generator/template/darkfish/class.rhtml +172 -0
- data/lib/rdoc/generator/template/darkfish/css/fonts.css +167 -0
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +639 -0
- data/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf +0 -0
- 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/images/add.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/arrow_up.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/brick.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/brick_link.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/bug.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/bullet_black.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/date.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/find.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif +0 -0
- data/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/package.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/page_green.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/page_white_text.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/page_white_width.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/plugin.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/ruby.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/tag_green.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/wrench.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/wrench_orange.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/zoom.png +0 -0
- data/lib/rdoc/generator/template/darkfish/index.rhtml +22 -0
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +84 -0
- data/lib/rdoc/generator/template/darkfish/js/search.js +110 -0
- data/lib/rdoc/generator/template/darkfish/page.rhtml +18 -0
- data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +18 -0
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +62 -0
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +58 -0
- data/lib/rdoc/generator/template/json_index/.document +1 -0
- data/lib/rdoc/generator/template/json_index/js/navigation.js +105 -0
- data/lib/rdoc/generator/template/json_index/js/searcher.js +229 -0
- data/lib/rdoc/generator.rb +51 -0
- data/lib/rdoc/ghost_method.rb +7 -0
- data/lib/rdoc/i18n/locale.rb +102 -0
- data/lib/rdoc/i18n/text.rb +126 -0
- data/lib/rdoc/i18n.rb +10 -0
- data/lib/rdoc/include.rb +10 -0
- data/lib/rdoc/known_classes.rb +73 -0
- data/lib/rdoc/markdown/entities.rb +2132 -0
- data/lib/rdoc/markdown/literals.kpeg +23 -0
- data/lib/rdoc/markdown/literals.rb +417 -0
- data/lib/rdoc/markdown.kpeg +1237 -0
- data/lib/rdoc/markdown.rb +16685 -0
- data/lib/rdoc/markup/attr_changer.rb +23 -0
- data/lib/rdoc/markup/attr_span.rb +36 -0
- data/lib/rdoc/markup/attribute_manager.rb +409 -0
- data/lib/rdoc/markup/attributes.rb +71 -0
- data/lib/rdoc/markup/blank_line.rb +28 -0
- data/lib/rdoc/markup/block_quote.rb +15 -0
- data/lib/rdoc/markup/document.rb +165 -0
- data/lib/rdoc/markup/formatter.rb +266 -0
- data/lib/rdoc/markup/hard_break.rb +32 -0
- data/lib/rdoc/markup/heading.rb +79 -0
- data/lib/rdoc/markup/include.rb +43 -0
- data/lib/rdoc/markup/indented_paragraph.rb +48 -0
- data/lib/rdoc/markup/list.rb +102 -0
- data/lib/rdoc/markup/list_item.rb +100 -0
- data/lib/rdoc/markup/paragraph.rb +29 -0
- data/lib/rdoc/markup/parser.rb +575 -0
- data/lib/rdoc/markup/pre_process.rb +296 -0
- data/lib/rdoc/markup/raw.rb +70 -0
- data/lib/rdoc/markup/regexp_handling.rb +41 -0
- data/lib/rdoc/markup/rule.rb +21 -0
- data/lib/rdoc/markup/table.rb +47 -0
- data/lib/rdoc/markup/to_ansi.rb +94 -0
- data/lib/rdoc/markup/to_bs.rb +77 -0
- data/lib/rdoc/markup/to_html.rb +444 -0
- data/lib/rdoc/markup/to_html_crossref.rb +176 -0
- data/lib/rdoc/markup/to_html_snippet.rb +285 -0
- data/lib/rdoc/markup/to_joined_paragraph.rb +47 -0
- data/lib/rdoc/markup/to_label.rb +75 -0
- data/lib/rdoc/markup/to_markdown.rb +192 -0
- data/lib/rdoc/markup/to_rdoc.rb +362 -0
- data/lib/rdoc/markup/to_table_of_contents.rb +89 -0
- data/lib/rdoc/markup/to_test.rb +70 -0
- data/lib/rdoc/markup/to_tt_only.rb +121 -0
- data/lib/rdoc/markup/verbatim.rb +84 -0
- data/lib/rdoc/markup.rb +867 -0
- data/lib/rdoc/meta_method.rb +7 -0
- data/lib/rdoc/method_attr.rb +419 -0
- data/lib/rdoc/mixin.rb +121 -0
- data/lib/rdoc/normal_class.rb +93 -0
- data/lib/rdoc/normal_module.rb +74 -0
- data/lib/rdoc/options.rb +1285 -0
- data/lib/rdoc/parser/c.rb +1225 -0
- data/lib/rdoc/parser/changelog.rb +335 -0
- data/lib/rdoc/parser/markdown.rb +24 -0
- data/lib/rdoc/parser/rd.rb +23 -0
- data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
- data/lib/rdoc/parser/ruby.rb +2327 -0
- data/lib/rdoc/parser/ruby_tools.rb +167 -0
- data/lib/rdoc/parser/simple.rb +61 -0
- data/lib/rdoc/parser/text.rb +12 -0
- data/lib/rdoc/parser.rb +277 -0
- data/lib/rdoc/rd/block_parser.rb +1056 -0
- data/lib/rdoc/rd/block_parser.ry +639 -0
- data/lib/rdoc/rd/inline.rb +72 -0
- data/lib/rdoc/rd/inline_parser.rb +1208 -0
- data/lib/rdoc/rd/inline_parser.ry +593 -0
- data/lib/rdoc/rd.rb +100 -0
- data/lib/rdoc/rdoc.rb +579 -0
- data/lib/rdoc/require.rb +52 -0
- data/lib/rdoc/ri/driver.rb +1572 -0
- data/lib/rdoc/ri/formatter.rb +6 -0
- data/lib/rdoc/ri/paths.rb +171 -0
- data/lib/rdoc/ri/store.rb +7 -0
- data/lib/rdoc/ri/task.rb +71 -0
- data/lib/rdoc/ri.rb +21 -0
- data/lib/rdoc/rubygems_hook.rb +246 -0
- data/lib/rdoc/servlet.rb +451 -0
- data/lib/rdoc/single_class.rb +26 -0
- data/lib/rdoc/stats/normal.rb +58 -0
- data/lib/rdoc/stats/quiet.rb +60 -0
- data/lib/rdoc/stats/verbose.rb +46 -0
- data/lib/rdoc/stats.rb +462 -0
- data/lib/rdoc/store.rb +979 -0
- data/lib/rdoc/task.rb +329 -0
- data/lib/rdoc/text.rb +304 -0
- data/lib/rdoc/token_stream.rb +119 -0
- data/lib/rdoc/tom_doc.rb +263 -0
- data/lib/rdoc/top_level.rb +289 -0
- data/lib/rdoc/version.rb +8 -0
- data/lib/rdoc.rb +201 -0
- data/man/ri.1 +247 -0
- data/rdoc.gemspec +249 -0
- metadata +279 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
##
|
|
3
|
+
# Outputs RDoc markup with vibrant ANSI color!
|
|
4
|
+
|
|
5
|
+
class RDoc::Markup::ToAnsi < RDoc::Markup::ToRdoc
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
# Creates a new ToAnsi visitor that is ready to output vibrant ANSI color!
|
|
9
|
+
|
|
10
|
+
def initialize markup = nil
|
|
11
|
+
super
|
|
12
|
+
|
|
13
|
+
@headings.clear
|
|
14
|
+
@headings[1] = ["\e[1;32m", "\e[m"] # bold
|
|
15
|
+
@headings[2] = ["\e[4;32m", "\e[m"] # underline
|
|
16
|
+
@headings[3] = ["\e[32m", "\e[m"] # just green
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Maps attributes to ANSI sequences
|
|
21
|
+
|
|
22
|
+
def init_tags
|
|
23
|
+
add_tag :BOLD, "\e[1m", "\e[m"
|
|
24
|
+
add_tag :TT, "\e[7m", "\e[m"
|
|
25
|
+
add_tag :EM, "\e[4m", "\e[m"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# Overrides indent width to ensure output lines up correctly.
|
|
30
|
+
|
|
31
|
+
def accept_list_item_end list_item
|
|
32
|
+
width = case @list_type.last
|
|
33
|
+
when :BULLET then
|
|
34
|
+
2
|
|
35
|
+
when :NOTE, :LABEL then
|
|
36
|
+
if @prefix then
|
|
37
|
+
@res << @prefix.strip
|
|
38
|
+
@prefix = nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
@res << "\n" unless res.length == 1
|
|
42
|
+
2
|
|
43
|
+
else
|
|
44
|
+
bullet = @list_index.last.to_s
|
|
45
|
+
@list_index[-1] = @list_index.last.succ
|
|
46
|
+
bullet.length + 2
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
@indent -= width
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
##
|
|
53
|
+
# Adds coloring to note and label list items
|
|
54
|
+
|
|
55
|
+
def accept_list_item_start list_item
|
|
56
|
+
bullet = case @list_type.last
|
|
57
|
+
when :BULLET then
|
|
58
|
+
'*'
|
|
59
|
+
when :NOTE, :LABEL then
|
|
60
|
+
labels = Array(list_item.label).map do |label|
|
|
61
|
+
attributes(label).strip
|
|
62
|
+
end.join "\n"
|
|
63
|
+
|
|
64
|
+
labels << ":\n" unless labels.empty?
|
|
65
|
+
|
|
66
|
+
labels
|
|
67
|
+
else
|
|
68
|
+
@list_index.last.to_s + '.'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
case @list_type.last
|
|
72
|
+
when :NOTE, :LABEL then
|
|
73
|
+
@indent += 2
|
|
74
|
+
@prefix = bullet + (' ' * @indent)
|
|
75
|
+
else
|
|
76
|
+
@prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
|
|
77
|
+
|
|
78
|
+
width = bullet.gsub(/\e\[[\d;]*m/, '').length + 1
|
|
79
|
+
|
|
80
|
+
@indent += width
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
##
|
|
85
|
+
# Starts accepting with a reset screen
|
|
86
|
+
|
|
87
|
+
def start_accepting
|
|
88
|
+
super
|
|
89
|
+
|
|
90
|
+
@res = ["\e[0m"]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
##
|
|
3
|
+
# Outputs RDoc markup with hot backspace action! You will probably need a
|
|
4
|
+
# pager to use this output format.
|
|
5
|
+
#
|
|
6
|
+
# This formatter won't work on 1.8.6 because it lacks String#chars.
|
|
7
|
+
|
|
8
|
+
class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc
|
|
9
|
+
|
|
10
|
+
##
|
|
11
|
+
# Returns a new ToBs that is ready for hot backspace action!
|
|
12
|
+
|
|
13
|
+
def initialize markup = nil
|
|
14
|
+
super
|
|
15
|
+
|
|
16
|
+
@in_b = false
|
|
17
|
+
@in_em = false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# Sets a flag that is picked up by #annotate to do the right thing in
|
|
22
|
+
# #convert_string
|
|
23
|
+
|
|
24
|
+
def init_tags
|
|
25
|
+
add_tag :BOLD, '+b', '-b'
|
|
26
|
+
add_tag :EM, '+_', '-_'
|
|
27
|
+
add_tag :TT, '' , '' # we need in_tt information maintained
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
##
|
|
31
|
+
# Makes heading text bold.
|
|
32
|
+
|
|
33
|
+
def accept_heading heading
|
|
34
|
+
use_prefix or @res << ' ' * @indent
|
|
35
|
+
@res << @headings[heading.level][0]
|
|
36
|
+
@in_b = true
|
|
37
|
+
@res << attributes(heading.text)
|
|
38
|
+
@in_b = false
|
|
39
|
+
@res << @headings[heading.level][1]
|
|
40
|
+
@res << "\n"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
##
|
|
44
|
+
# Turns on or off regexp handling for +convert_string+
|
|
45
|
+
|
|
46
|
+
def annotate tag
|
|
47
|
+
case tag
|
|
48
|
+
when '+b' then @in_b = true
|
|
49
|
+
when '-b' then @in_b = false
|
|
50
|
+
when '+_' then @in_em = true
|
|
51
|
+
when '-_' then @in_em = false
|
|
52
|
+
end
|
|
53
|
+
''
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
# Calls convert_string on the result of convert_regexp_handling
|
|
58
|
+
|
|
59
|
+
def convert_regexp_handling target
|
|
60
|
+
convert_string super
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
##
|
|
64
|
+
# Adds bold or underline mixed with backspaces
|
|
65
|
+
|
|
66
|
+
def convert_string string
|
|
67
|
+
return string unless @in_b or @in_em
|
|
68
|
+
chars = if @in_b then
|
|
69
|
+
string.chars.map do |char| "#{char}\b#{char}" end
|
|
70
|
+
elsif @in_em then
|
|
71
|
+
string.chars.map do |char| "_\b#{char}" end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
chars.join
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'cgi'
|
|
3
|
+
|
|
4
|
+
##
|
|
5
|
+
# Outputs RDoc markup as HTML.
|
|
6
|
+
|
|
7
|
+
class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
|
|
8
|
+
|
|
9
|
+
include RDoc::Text
|
|
10
|
+
|
|
11
|
+
# :section: Utilities
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
# Maps RDoc::Markup::Parser::LIST_TOKENS types to HTML tags
|
|
15
|
+
|
|
16
|
+
LIST_TYPE_TO_HTML = {
|
|
17
|
+
:BULLET => ['<ul>', '</ul>'],
|
|
18
|
+
:LABEL => ['<dl class="rdoc-list label-list">', '</dl>'],
|
|
19
|
+
:LALPHA => ['<ol style="list-style-type: lower-alpha">', '</ol>'],
|
|
20
|
+
:NOTE => ['<dl class="rdoc-list note-list">', '</dl>'],
|
|
21
|
+
:NUMBER => ['<ol>', '</ol>'],
|
|
22
|
+
:UALPHA => ['<ol style="list-style-type: upper-alpha">', '</ol>'],
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
attr_reader :res # :nodoc:
|
|
26
|
+
attr_reader :in_list_entry # :nodoc:
|
|
27
|
+
attr_reader :list # :nodoc:
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
# The RDoc::CodeObject HTML is being generated for. This is used to
|
|
31
|
+
# generate namespaced URI fragments
|
|
32
|
+
|
|
33
|
+
attr_accessor :code_object
|
|
34
|
+
|
|
35
|
+
##
|
|
36
|
+
# Path to this document for relative links
|
|
37
|
+
|
|
38
|
+
attr_accessor :from_path
|
|
39
|
+
|
|
40
|
+
# :section:
|
|
41
|
+
|
|
42
|
+
##
|
|
43
|
+
# Creates a new formatter that will output HTML
|
|
44
|
+
|
|
45
|
+
def initialize options, markup = nil
|
|
46
|
+
super
|
|
47
|
+
|
|
48
|
+
@code_object = nil
|
|
49
|
+
@from_path = ''
|
|
50
|
+
@in_list_entry = nil
|
|
51
|
+
@list = nil
|
|
52
|
+
@th = nil
|
|
53
|
+
@hard_break = "<br>\n"
|
|
54
|
+
|
|
55
|
+
init_regexp_handlings
|
|
56
|
+
|
|
57
|
+
init_tags
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# :section: Regexp Handling
|
|
61
|
+
#
|
|
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
|
|
81
|
+
|
|
82
|
+
def handle_RDOCLINK url # :nodoc:
|
|
83
|
+
case url
|
|
84
|
+
when /^rdoc-ref:/
|
|
85
|
+
$'
|
|
86
|
+
when /^rdoc-label:/
|
|
87
|
+
text = $'
|
|
88
|
+
|
|
89
|
+
text = case text
|
|
90
|
+
when /\Alabel-/ then $'
|
|
91
|
+
when /\Afootmark-/ then $'
|
|
92
|
+
when /\Afoottext-/ then $'
|
|
93
|
+
else text
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
gen_url url, text
|
|
97
|
+
when /^rdoc-image:/
|
|
98
|
+
"<img src=\"#{$'}\">"
|
|
99
|
+
else
|
|
100
|
+
url =~ /\Ardoc-[a-z]+:/
|
|
101
|
+
|
|
102
|
+
$'
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
##
|
|
107
|
+
# +target+ is a <code><br></code>
|
|
108
|
+
|
|
109
|
+
def handle_regexp_HARD_BREAK target
|
|
110
|
+
'<br>'
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
##
|
|
114
|
+
# +target+ is a potential link. The following schemes are handled:
|
|
115
|
+
#
|
|
116
|
+
# <tt>mailto:</tt>::
|
|
117
|
+
# Inserted as-is.
|
|
118
|
+
# <tt>http:</tt>::
|
|
119
|
+
# Links are checked to see if they reference an image. If so, that image
|
|
120
|
+
# gets inserted using an <tt><img></tt> tag. Otherwise a conventional
|
|
121
|
+
# <tt><a href></tt> is used.
|
|
122
|
+
# <tt>link:</tt>::
|
|
123
|
+
# Reference to a local file relative to the output directory.
|
|
124
|
+
|
|
125
|
+
def handle_regexp_HYPERLINK(target)
|
|
126
|
+
url = target.text
|
|
127
|
+
|
|
128
|
+
gen_url url, url
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
##
|
|
132
|
+
# +target+ is an rdoc-schemed link that will be converted into a hyperlink.
|
|
133
|
+
#
|
|
134
|
+
# For the +rdoc-ref+ scheme the named reference will be returned without
|
|
135
|
+
# creating a link.
|
|
136
|
+
#
|
|
137
|
+
# For the +rdoc-label+ scheme the footnote and label prefixes are stripped
|
|
138
|
+
# when creating a link. All other contents will be linked verbatim.
|
|
139
|
+
|
|
140
|
+
def handle_regexp_RDOCLINK target
|
|
141
|
+
handle_RDOCLINK target.text
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
##
|
|
145
|
+
# This +target+ is a link where the label is different from the URL
|
|
146
|
+
# <tt>label[url]</tt> or <tt>{long label}[url]</tt>
|
|
147
|
+
|
|
148
|
+
def handle_regexp_TIDYLINK(target)
|
|
149
|
+
text = target.text
|
|
150
|
+
|
|
151
|
+
return text unless
|
|
152
|
+
text =~ /^\{(.*)\}\[(.*?)\]$/ or text =~ /^(\S+)\[(.*?)\]$/
|
|
153
|
+
|
|
154
|
+
label = $1
|
|
155
|
+
url = $2
|
|
156
|
+
|
|
157
|
+
label = handle_RDOCLINK label if /^rdoc-image:/ =~ label
|
|
158
|
+
|
|
159
|
+
gen_url url, label
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# :section: Visitor
|
|
163
|
+
#
|
|
164
|
+
# These methods implement the HTML visitor.
|
|
165
|
+
|
|
166
|
+
##
|
|
167
|
+
# Prepares the visitor for HTML generation
|
|
168
|
+
|
|
169
|
+
def start_accepting
|
|
170
|
+
@res = []
|
|
171
|
+
@in_list_entry = []
|
|
172
|
+
@list = []
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
##
|
|
176
|
+
# Returns the generated output
|
|
177
|
+
|
|
178
|
+
def end_accepting
|
|
179
|
+
@res.join
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
##
|
|
183
|
+
# Adds +block_quote+ to the output
|
|
184
|
+
|
|
185
|
+
def accept_block_quote block_quote
|
|
186
|
+
@res << "\n<blockquote>"
|
|
187
|
+
|
|
188
|
+
block_quote.parts.each do |part|
|
|
189
|
+
part.accept self
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
@res << "</blockquote>\n"
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
##
|
|
196
|
+
# Adds +paragraph+ to the output
|
|
197
|
+
|
|
198
|
+
def accept_paragraph paragraph
|
|
199
|
+
@res << "\n<p>"
|
|
200
|
+
text = paragraph.text @hard_break
|
|
201
|
+
text = text.gsub(/\r?\n/, ' ')
|
|
202
|
+
@res << to_html(text)
|
|
203
|
+
@res << "</p>\n"
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
##
|
|
207
|
+
# Adds +verbatim+ to the output
|
|
208
|
+
|
|
209
|
+
def accept_verbatim verbatim
|
|
210
|
+
text = verbatim.text.rstrip
|
|
211
|
+
|
|
212
|
+
klass = nil
|
|
213
|
+
|
|
214
|
+
content = if verbatim.ruby? or parseable? text then
|
|
215
|
+
begin
|
|
216
|
+
tokens = RDoc::Parser::RipperStateLex.parse text
|
|
217
|
+
klass = ' class="ruby"'
|
|
218
|
+
|
|
219
|
+
result = RDoc::TokenStream.to_html tokens
|
|
220
|
+
result = result + "\n" unless "\n" == result[-1]
|
|
221
|
+
result
|
|
222
|
+
rescue
|
|
223
|
+
CGI.escapeHTML text
|
|
224
|
+
end
|
|
225
|
+
else
|
|
226
|
+
CGI.escapeHTML text
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
if @options.pipe then
|
|
230
|
+
@res << "\n<pre><code>#{CGI.escapeHTML text}\n</code></pre>\n"
|
|
231
|
+
else
|
|
232
|
+
@res << "\n<pre#{klass}>#{content}</pre>\n"
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
##
|
|
237
|
+
# Adds +rule+ to the output
|
|
238
|
+
|
|
239
|
+
def accept_rule rule
|
|
240
|
+
@res << "<hr>\n"
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
##
|
|
244
|
+
# Prepares the visitor for consuming +list+
|
|
245
|
+
|
|
246
|
+
def accept_list_start(list)
|
|
247
|
+
@list << list.type
|
|
248
|
+
@res << html_list_name(list.type, true)
|
|
249
|
+
@in_list_entry.push false
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
##
|
|
253
|
+
# Finishes consumption of +list+
|
|
254
|
+
|
|
255
|
+
def accept_list_end(list)
|
|
256
|
+
@list.pop
|
|
257
|
+
if tag = @in_list_entry.pop
|
|
258
|
+
@res << tag
|
|
259
|
+
end
|
|
260
|
+
@res << html_list_name(list.type, false) << "\n"
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
##
|
|
264
|
+
# Prepares the visitor for consuming +list_item+
|
|
265
|
+
|
|
266
|
+
def accept_list_item_start(list_item)
|
|
267
|
+
if tag = @in_list_entry.last
|
|
268
|
+
@res << tag
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
@res << list_item_start(list_item, @list.last)
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
##
|
|
275
|
+
# Finishes consumption of +list_item+
|
|
276
|
+
|
|
277
|
+
def accept_list_item_end(list_item)
|
|
278
|
+
@in_list_entry[-1] = list_end_for(@list.last)
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
##
|
|
282
|
+
# Adds +blank_line+ to the output
|
|
283
|
+
|
|
284
|
+
def accept_blank_line(blank_line)
|
|
285
|
+
# @res << annotate("<p />") << "\n"
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
##
|
|
289
|
+
# Adds +heading+ to the output. The headings greater than 6 are trimmed to
|
|
290
|
+
# level 6.
|
|
291
|
+
|
|
292
|
+
def accept_heading heading
|
|
293
|
+
level = [6, heading.level].min
|
|
294
|
+
|
|
295
|
+
label = heading.label @code_object
|
|
296
|
+
|
|
297
|
+
@res << if @options.output_decoration
|
|
298
|
+
"\n<h#{level} id=\"#{label}\">"
|
|
299
|
+
else
|
|
300
|
+
"\n<h#{level}>"
|
|
301
|
+
end
|
|
302
|
+
@res << to_html(heading.text)
|
|
303
|
+
unless @options.pipe then
|
|
304
|
+
@res << "<span><a href=\"##{label}\">¶</a>"
|
|
305
|
+
@res << " <a href=\"#top\">↑</a></span>"
|
|
306
|
+
end
|
|
307
|
+
@res << "</h#{level}>\n"
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
##
|
|
311
|
+
# Adds +raw+ to the output
|
|
312
|
+
|
|
313
|
+
def accept_raw raw
|
|
314
|
+
@res << raw.parts.join("\n")
|
|
315
|
+
end
|
|
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
|
+
|
|
340
|
+
# :section: Utilities
|
|
341
|
+
|
|
342
|
+
##
|
|
343
|
+
# CGI-escapes +text+
|
|
344
|
+
|
|
345
|
+
def convert_string(text)
|
|
346
|
+
CGI.escapeHTML text
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
##
|
|
350
|
+
# Generate a link to +url+ with content +text+. Handles the special cases
|
|
351
|
+
# for img: and link: described under handle_regexp_HYPERLINK
|
|
352
|
+
|
|
353
|
+
def gen_url url, text
|
|
354
|
+
scheme, url, id = parse_url url
|
|
355
|
+
|
|
356
|
+
if %w[http https link].include?(scheme) and
|
|
357
|
+
url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
|
|
358
|
+
"<img src=\"#{url}\" />"
|
|
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
|
+
|
|
364
|
+
text = text.sub %r%^#{scheme}:/*%i, ''
|
|
365
|
+
text = text.sub %r%^[*\^](\d+)$%, '\1'
|
|
366
|
+
|
|
367
|
+
link = "<a#{id} href=\"#{url}\">#{text}</a>"
|
|
368
|
+
|
|
369
|
+
link = "<sup>#{link}</sup>" if /"foot/ =~ id
|
|
370
|
+
|
|
371
|
+
link
|
|
372
|
+
end
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
##
|
|
376
|
+
# Determines the HTML list element for +list_type+ and +open_tag+
|
|
377
|
+
|
|
378
|
+
def html_list_name(list_type, open_tag)
|
|
379
|
+
tags = LIST_TYPE_TO_HTML[list_type]
|
|
380
|
+
raise RDoc::Error, "Invalid list type: #{list_type.inspect}" unless tags
|
|
381
|
+
tags[open_tag ? 0 : 1]
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
##
|
|
385
|
+
# Maps attributes to HTML tags
|
|
386
|
+
|
|
387
|
+
def init_tags
|
|
388
|
+
add_tag :BOLD, "<strong>", "</strong>"
|
|
389
|
+
add_tag :TT, "<code>", "</code>"
|
|
390
|
+
add_tag :EM, "<em>", "</em>"
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
##
|
|
394
|
+
# Returns the HTML tag for +list_type+, possible using a label from
|
|
395
|
+
# +list_item+
|
|
396
|
+
|
|
397
|
+
def list_item_start(list_item, list_type)
|
|
398
|
+
case list_type
|
|
399
|
+
when :BULLET, :LALPHA, :NUMBER, :UALPHA then
|
|
400
|
+
"<li>"
|
|
401
|
+
when :LABEL, :NOTE then
|
|
402
|
+
Array(list_item.label).map do |label|
|
|
403
|
+
"<dt>#{to_html label}\n"
|
|
404
|
+
end.join << "<dd>"
|
|
405
|
+
else
|
|
406
|
+
raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
|
|
407
|
+
end
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
##
|
|
411
|
+
# Returns the HTML end-tag for +list_type+
|
|
412
|
+
|
|
413
|
+
def list_end_for(list_type)
|
|
414
|
+
case list_type
|
|
415
|
+
when :BULLET, :LALPHA, :NUMBER, :UALPHA then
|
|
416
|
+
"</li>"
|
|
417
|
+
when :LABEL, :NOTE then
|
|
418
|
+
"</dd>"
|
|
419
|
+
else
|
|
420
|
+
raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
|
|
421
|
+
end
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
##
|
|
425
|
+
# Returns true if text is valid ruby syntax
|
|
426
|
+
|
|
427
|
+
def parseable? text
|
|
428
|
+
verbose, $VERBOSE = $VERBOSE, nil
|
|
429
|
+
eval("BEGIN {return true}\n#{text}")
|
|
430
|
+
rescue SyntaxError
|
|
431
|
+
false
|
|
432
|
+
ensure
|
|
433
|
+
$VERBOSE = verbose
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
##
|
|
437
|
+
# Converts +item+ to HTML using RDoc::Text#to_html
|
|
438
|
+
|
|
439
|
+
def to_html item
|
|
440
|
+
super convert_flow @am.flow item
|
|
441
|
+
end
|
|
442
|
+
|
|
443
|
+
end
|
|
444
|
+
|