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.
Files changed (196) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.rdoc +220 -0
  3. data/CVE-2013-0256.rdoc +49 -0
  4. data/ExampleMarkdown.md +37 -0
  5. data/ExampleRDoc.rdoc +208 -0
  6. data/Gemfile +12 -0
  7. data/History.rdoc +1666 -0
  8. data/LEGAL.rdoc +50 -0
  9. data/LICENSE.rdoc +57 -0
  10. data/README.rdoc +133 -0
  11. data/RI.rdoc +57 -0
  12. data/Rakefile +101 -0
  13. data/TODO.rdoc +59 -0
  14. data/bin/console +7 -0
  15. data/bin/setup +6 -0
  16. data/exe/rdoc +44 -0
  17. data/exe/ri +12 -0
  18. data/lib/rdoc/alias.rb +112 -0
  19. data/lib/rdoc/anon_class.rb +11 -0
  20. data/lib/rdoc/any_method.rb +361 -0
  21. data/lib/rdoc/attr.rb +176 -0
  22. data/lib/rdoc/class_module.rb +802 -0
  23. data/lib/rdoc/code_object.rb +421 -0
  24. data/lib/rdoc/code_objects.rb +6 -0
  25. data/lib/rdoc/comment.rb +250 -0
  26. data/lib/rdoc/constant.rb +187 -0
  27. data/lib/rdoc/context/section.rb +232 -0
  28. data/lib/rdoc/context.rb +1266 -0
  29. data/lib/rdoc/cross_reference.rb +202 -0
  30. data/lib/rdoc/encoding.rb +136 -0
  31. data/lib/rdoc/erb_partial.rb +19 -0
  32. data/lib/rdoc/erbio.rb +42 -0
  33. data/lib/rdoc/extend.rb +10 -0
  34. data/lib/rdoc/generator/darkfish.rb +790 -0
  35. data/lib/rdoc/generator/json_index.rb +300 -0
  36. data/lib/rdoc/generator/markup.rb +160 -0
  37. data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
  38. data/lib/rdoc/generator/pot/po.rb +84 -0
  39. data/lib/rdoc/generator/pot/po_entry.rb +141 -0
  40. data/lib/rdoc/generator/pot.rb +98 -0
  41. data/lib/rdoc/generator/ri.rb +31 -0
  42. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  43. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
  44. data/lib/rdoc/generator/template/darkfish/_head.rhtml +22 -0
  45. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +19 -0
  46. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +9 -0
  47. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +15 -0
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +9 -0
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +15 -0
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +15 -0
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +12 -0
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +11 -0
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +12 -0
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +11 -0
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +14 -0
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +11 -0
  57. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +18 -0
  58. data/lib/rdoc/generator/template/darkfish/class.rhtml +172 -0
  59. data/lib/rdoc/generator/template/darkfish/css/fonts.css +167 -0
  60. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +639 -0
  61. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf +0 -0
  64. data/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf +0 -0
  65. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  66. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  67. data/lib/rdoc/generator/template/darkfish/images/add.png +0 -0
  68. data/lib/rdoc/generator/template/darkfish/images/arrow_up.png +0 -0
  69. data/lib/rdoc/generator/template/darkfish/images/brick.png +0 -0
  70. data/lib/rdoc/generator/template/darkfish/images/brick_link.png +0 -0
  71. data/lib/rdoc/generator/template/darkfish/images/bug.png +0 -0
  72. data/lib/rdoc/generator/template/darkfish/images/bullet_black.png +0 -0
  73. data/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png +0 -0
  74. data/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png +0 -0
  75. data/lib/rdoc/generator/template/darkfish/images/date.png +0 -0
  76. data/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
  77. data/lib/rdoc/generator/template/darkfish/images/find.png +0 -0
  78. data/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif +0 -0
  79. data/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png +0 -0
  80. data/lib/rdoc/generator/template/darkfish/images/package.png +0 -0
  81. data/lib/rdoc/generator/template/darkfish/images/page_green.png +0 -0
  82. data/lib/rdoc/generator/template/darkfish/images/page_white_text.png +0 -0
  83. data/lib/rdoc/generator/template/darkfish/images/page_white_width.png +0 -0
  84. data/lib/rdoc/generator/template/darkfish/images/plugin.png +0 -0
  85. data/lib/rdoc/generator/template/darkfish/images/ruby.png +0 -0
  86. data/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
  87. data/lib/rdoc/generator/template/darkfish/images/tag_green.png +0 -0
  88. data/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
  89. data/lib/rdoc/generator/template/darkfish/images/wrench.png +0 -0
  90. data/lib/rdoc/generator/template/darkfish/images/wrench_orange.png +0 -0
  91. data/lib/rdoc/generator/template/darkfish/images/zoom.png +0 -0
  92. data/lib/rdoc/generator/template/darkfish/index.rhtml +22 -0
  93. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +84 -0
  94. data/lib/rdoc/generator/template/darkfish/js/search.js +110 -0
  95. data/lib/rdoc/generator/template/darkfish/page.rhtml +18 -0
  96. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +18 -0
  97. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +62 -0
  98. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +58 -0
  99. data/lib/rdoc/generator/template/json_index/.document +1 -0
  100. data/lib/rdoc/generator/template/json_index/js/navigation.js +105 -0
  101. data/lib/rdoc/generator/template/json_index/js/searcher.js +229 -0
  102. data/lib/rdoc/generator.rb +51 -0
  103. data/lib/rdoc/ghost_method.rb +7 -0
  104. data/lib/rdoc/i18n/locale.rb +102 -0
  105. data/lib/rdoc/i18n/text.rb +126 -0
  106. data/lib/rdoc/i18n.rb +10 -0
  107. data/lib/rdoc/include.rb +10 -0
  108. data/lib/rdoc/known_classes.rb +73 -0
  109. data/lib/rdoc/markdown/entities.rb +2132 -0
  110. data/lib/rdoc/markdown/literals.kpeg +23 -0
  111. data/lib/rdoc/markdown/literals.rb +417 -0
  112. data/lib/rdoc/markdown.kpeg +1237 -0
  113. data/lib/rdoc/markdown.rb +16685 -0
  114. data/lib/rdoc/markup/attr_changer.rb +23 -0
  115. data/lib/rdoc/markup/attr_span.rb +36 -0
  116. data/lib/rdoc/markup/attribute_manager.rb +409 -0
  117. data/lib/rdoc/markup/attributes.rb +71 -0
  118. data/lib/rdoc/markup/blank_line.rb +28 -0
  119. data/lib/rdoc/markup/block_quote.rb +15 -0
  120. data/lib/rdoc/markup/document.rb +165 -0
  121. data/lib/rdoc/markup/formatter.rb +266 -0
  122. data/lib/rdoc/markup/hard_break.rb +32 -0
  123. data/lib/rdoc/markup/heading.rb +79 -0
  124. data/lib/rdoc/markup/include.rb +43 -0
  125. data/lib/rdoc/markup/indented_paragraph.rb +48 -0
  126. data/lib/rdoc/markup/list.rb +102 -0
  127. data/lib/rdoc/markup/list_item.rb +100 -0
  128. data/lib/rdoc/markup/paragraph.rb +29 -0
  129. data/lib/rdoc/markup/parser.rb +575 -0
  130. data/lib/rdoc/markup/pre_process.rb +296 -0
  131. data/lib/rdoc/markup/raw.rb +70 -0
  132. data/lib/rdoc/markup/regexp_handling.rb +41 -0
  133. data/lib/rdoc/markup/rule.rb +21 -0
  134. data/lib/rdoc/markup/table.rb +47 -0
  135. data/lib/rdoc/markup/to_ansi.rb +94 -0
  136. data/lib/rdoc/markup/to_bs.rb +77 -0
  137. data/lib/rdoc/markup/to_html.rb +444 -0
  138. data/lib/rdoc/markup/to_html_crossref.rb +176 -0
  139. data/lib/rdoc/markup/to_html_snippet.rb +285 -0
  140. data/lib/rdoc/markup/to_joined_paragraph.rb +47 -0
  141. data/lib/rdoc/markup/to_label.rb +75 -0
  142. data/lib/rdoc/markup/to_markdown.rb +192 -0
  143. data/lib/rdoc/markup/to_rdoc.rb +362 -0
  144. data/lib/rdoc/markup/to_table_of_contents.rb +89 -0
  145. data/lib/rdoc/markup/to_test.rb +70 -0
  146. data/lib/rdoc/markup/to_tt_only.rb +121 -0
  147. data/lib/rdoc/markup/verbatim.rb +84 -0
  148. data/lib/rdoc/markup.rb +867 -0
  149. data/lib/rdoc/meta_method.rb +7 -0
  150. data/lib/rdoc/method_attr.rb +419 -0
  151. data/lib/rdoc/mixin.rb +121 -0
  152. data/lib/rdoc/normal_class.rb +93 -0
  153. data/lib/rdoc/normal_module.rb +74 -0
  154. data/lib/rdoc/options.rb +1285 -0
  155. data/lib/rdoc/parser/c.rb +1225 -0
  156. data/lib/rdoc/parser/changelog.rb +335 -0
  157. data/lib/rdoc/parser/markdown.rb +24 -0
  158. data/lib/rdoc/parser/rd.rb +23 -0
  159. data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
  160. data/lib/rdoc/parser/ruby.rb +2327 -0
  161. data/lib/rdoc/parser/ruby_tools.rb +167 -0
  162. data/lib/rdoc/parser/simple.rb +61 -0
  163. data/lib/rdoc/parser/text.rb +12 -0
  164. data/lib/rdoc/parser.rb +277 -0
  165. data/lib/rdoc/rd/block_parser.rb +1056 -0
  166. data/lib/rdoc/rd/block_parser.ry +639 -0
  167. data/lib/rdoc/rd/inline.rb +72 -0
  168. data/lib/rdoc/rd/inline_parser.rb +1208 -0
  169. data/lib/rdoc/rd/inline_parser.ry +593 -0
  170. data/lib/rdoc/rd.rb +100 -0
  171. data/lib/rdoc/rdoc.rb +579 -0
  172. data/lib/rdoc/require.rb +52 -0
  173. data/lib/rdoc/ri/driver.rb +1572 -0
  174. data/lib/rdoc/ri/formatter.rb +6 -0
  175. data/lib/rdoc/ri/paths.rb +171 -0
  176. data/lib/rdoc/ri/store.rb +7 -0
  177. data/lib/rdoc/ri/task.rb +71 -0
  178. data/lib/rdoc/ri.rb +21 -0
  179. data/lib/rdoc/rubygems_hook.rb +246 -0
  180. data/lib/rdoc/servlet.rb +451 -0
  181. data/lib/rdoc/single_class.rb +26 -0
  182. data/lib/rdoc/stats/normal.rb +58 -0
  183. data/lib/rdoc/stats/quiet.rb +60 -0
  184. data/lib/rdoc/stats/verbose.rb +46 -0
  185. data/lib/rdoc/stats.rb +462 -0
  186. data/lib/rdoc/store.rb +979 -0
  187. data/lib/rdoc/task.rb +329 -0
  188. data/lib/rdoc/text.rb +304 -0
  189. data/lib/rdoc/token_stream.rb +119 -0
  190. data/lib/rdoc/tom_doc.rb +263 -0
  191. data/lib/rdoc/top_level.rb +289 -0
  192. data/lib/rdoc/version.rb +8 -0
  193. data/lib/rdoc.rb +201 -0
  194. data/man/ri.1 +247 -0
  195. data/rdoc.gemspec +249 -0
  196. 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}\">&para;</a>"
305
+ @res << " <a href=\"#top\">&uarr;</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
+