rdoc 3.1 → 6.3.3

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.

Files changed (247) 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 +129 -0
  11. data/RI.rdoc +57 -0
  12. data/Rakefile +84 -81
  13. data/TODO.rdoc +59 -0
  14. data/bin/console +7 -0
  15. data/bin/setup +6 -0
  16. data/{bin → exe}/rdoc +11 -2
  17. data/exe/ri +12 -0
  18. data/lib/rdoc/alias.rb +1 -2
  19. data/lib/rdoc/anon_class.rb +3 -2
  20. data/lib/rdoc/any_method.rb +234 -40
  21. data/lib/rdoc/attr.rb +79 -11
  22. data/lib/rdoc/class_module.rb +443 -71
  23. data/lib/rdoc/code_object.rb +216 -20
  24. data/lib/rdoc/code_objects.rb +4 -21
  25. data/lib/rdoc/comment.rb +250 -0
  26. data/lib/rdoc/constant.rb +110 -9
  27. data/lib/rdoc/context/section.rb +232 -0
  28. data/lib/rdoc/context.rb +392 -172
  29. data/lib/rdoc/cross_reference.rb +202 -0
  30. data/lib/rdoc/encoding.rb +83 -28
  31. data/lib/rdoc/erb_partial.rb +19 -0
  32. data/lib/rdoc/erbio.rb +8 -3
  33. data/lib/rdoc/extend.rb +10 -0
  34. data/lib/rdoc/generator/darkfish.rb +507 -84
  35. data/lib/rdoc/generator/json_index.rb +300 -0
  36. data/lib/rdoc/generator/markup.rb +27 -74
  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 +8 -62
  42. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
  43. data/lib/rdoc/generator/template/darkfish/_head.rhtml +22 -0
  44. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +19 -0
  45. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +9 -0
  46. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +15 -0
  47. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +9 -0
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +15 -0
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +15 -0
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +12 -0
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +11 -0
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +12 -0
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +11 -0
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +14 -0
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +11 -0
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +18 -0
  57. data/lib/rdoc/generator/template/darkfish/class.rhtml +172 -0
  58. data/lib/rdoc/generator/template/darkfish/css/fonts.css +167 -0
  59. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +639 -0
  60. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf +0 -0
  61. data/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf +0 -0
  64. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  65. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  66. data/lib/rdoc/generator/template/darkfish/images/add.png +0 -0
  67. data/lib/rdoc/generator/template/darkfish/images/arrow_up.png +0 -0
  68. data/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
  69. data/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
  70. data/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
  71. data/lib/rdoc/generator/template/darkfish/index.rhtml +18 -60
  72. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -83
  73. data/lib/rdoc/generator/template/darkfish/js/search.js +110 -0
  74. data/lib/rdoc/generator/template/darkfish/page.rhtml +18 -0
  75. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +18 -0
  76. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +62 -0
  77. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +58 -0
  78. data/lib/rdoc/generator/template/json_index/.document +1 -0
  79. data/lib/rdoc/generator/template/json_index/js/navigation.js +105 -0
  80. data/lib/rdoc/generator/template/json_index/js/searcher.js +229 -0
  81. data/lib/rdoc/generator.rb +24 -13
  82. data/lib/rdoc/ghost_method.rb +1 -2
  83. data/lib/rdoc/i18n/locale.rb +102 -0
  84. data/lib/rdoc/i18n/text.rb +126 -0
  85. data/lib/rdoc/i18n.rb +10 -0
  86. data/lib/rdoc/include.rb +5 -95
  87. data/lib/rdoc/known_classes.rb +5 -2
  88. data/lib/rdoc/markdown/entities.rb +2132 -0
  89. data/lib/rdoc/markdown/literals.kpeg +23 -0
  90. data/lib/rdoc/markdown/literals.rb +416 -0
  91. data/lib/rdoc/markdown.kpeg +1237 -0
  92. data/lib/rdoc/markdown.rb +16684 -0
  93. data/lib/rdoc/markup/attr_changer.rb +23 -0
  94. data/lib/rdoc/markup/attr_span.rb +36 -0
  95. data/lib/rdoc/markup/attribute_manager.rb +135 -62
  96. data/lib/rdoc/markup/attributes.rb +71 -0
  97. data/lib/rdoc/markup/blank_line.rb +1 -0
  98. data/lib/rdoc/markup/block_quote.rb +15 -0
  99. data/lib/rdoc/markup/document.rb +96 -9
  100. data/lib/rdoc/markup/formatter.rb +138 -25
  101. data/lib/rdoc/markup/hard_break.rb +32 -0
  102. data/lib/rdoc/markup/heading.rb +61 -2
  103. data/lib/rdoc/markup/include.rb +43 -0
  104. data/lib/rdoc/markup/indented_paragraph.rb +48 -0
  105. data/lib/rdoc/markup/list.rb +25 -4
  106. data/lib/rdoc/markup/list_item.rb +18 -4
  107. data/lib/rdoc/markup/paragraph.rb +15 -0
  108. data/lib/rdoc/markup/parser.rb +180 -88
  109. data/lib/rdoc/markup/pre_process.rb +183 -38
  110. data/lib/rdoc/markup/raw.rb +6 -5
  111. data/lib/rdoc/markup/regexp_handling.rb +41 -0
  112. data/lib/rdoc/markup/rule.rb +1 -0
  113. data/lib/rdoc/markup/table.rb +47 -0
  114. data/lib/rdoc/markup/to_ansi.rb +17 -7
  115. data/lib/rdoc/markup/to_bs.rb +5 -8
  116. data/lib/rdoc/markup/to_html.rb +238 -137
  117. data/lib/rdoc/markup/to_html_crossref.rb +125 -152
  118. data/lib/rdoc/markup/to_html_snippet.rb +285 -0
  119. data/lib/rdoc/markup/to_joined_paragraph.rb +47 -0
  120. data/lib/rdoc/markup/to_label.rb +75 -0
  121. data/lib/rdoc/markup/to_markdown.rb +192 -0
  122. data/lib/rdoc/markup/to_rdoc.rb +85 -15
  123. data/lib/rdoc/markup/to_table_of_contents.rb +89 -0
  124. data/lib/rdoc/markup/to_test.rb +2 -4
  125. data/lib/rdoc/markup/to_tt_only.rb +121 -0
  126. data/lib/rdoc/markup/verbatim.rb +39 -0
  127. data/lib/rdoc/markup.rb +388 -110
  128. data/lib/rdoc/meta_method.rb +1 -2
  129. data/lib/rdoc/method_attr.rb +87 -21
  130. data/lib/rdoc/mixin.rb +121 -0
  131. data/lib/rdoc/normal_class.rb +39 -10
  132. data/lib/rdoc/normal_module.rb +22 -7
  133. data/lib/rdoc/options.rb +613 -73
  134. data/lib/rdoc/parser/c.rb +621 -287
  135. data/lib/rdoc/parser/changelog.rb +335 -0
  136. data/lib/rdoc/parser/markdown.rb +24 -0
  137. data/lib/rdoc/parser/rd.rb +23 -0
  138. data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
  139. data/lib/rdoc/parser/ruby.rb +1368 -762
  140. data/lib/rdoc/parser/ruby_tools.rb +42 -35
  141. data/lib/rdoc/parser/simple.rb +23 -11
  142. data/lib/rdoc/parser/text.rb +12 -0
  143. data/lib/rdoc/parser.rb +162 -89
  144. data/lib/rdoc/rd/block_parser.rb +1056 -0
  145. data/lib/rdoc/rd/block_parser.ry +639 -0
  146. data/lib/rdoc/rd/inline.rb +72 -0
  147. data/lib/rdoc/rd/inline_parser.rb +1208 -0
  148. data/lib/rdoc/rd/inline_parser.ry +593 -0
  149. data/lib/rdoc/rd.rb +100 -0
  150. data/lib/rdoc/rdoc.rb +208 -115
  151. data/lib/rdoc/require.rb +1 -2
  152. data/lib/rdoc/ri/driver.rb +734 -239
  153. data/lib/rdoc/ri/formatter.rb +1 -0
  154. data/lib/rdoc/ri/paths.rb +91 -48
  155. data/lib/rdoc/ri/store.rb +3 -261
  156. data/lib/rdoc/ri/task.rb +71 -0
  157. data/lib/rdoc/ri.rb +5 -2
  158. data/lib/rdoc/rubygems_hook.rb +246 -0
  159. data/lib/rdoc/servlet.rb +451 -0
  160. data/lib/rdoc/single_class.rb +14 -2
  161. data/lib/rdoc/stats/normal.rb +19 -12
  162. data/lib/rdoc/stats/quiet.rb +1 -0
  163. data/lib/rdoc/stats/verbose.rb +1 -0
  164. data/lib/rdoc/stats.rb +262 -104
  165. data/lib/rdoc/store.rb +979 -0
  166. data/lib/rdoc/task.rb +84 -44
  167. data/lib/rdoc/text.rb +117 -72
  168. data/lib/rdoc/token_stream.rb +73 -4
  169. data/lib/rdoc/tom_doc.rb +263 -0
  170. data/lib/rdoc/top_level.rb +111 -261
  171. data/lib/rdoc/version.rb +8 -0
  172. data/lib/rdoc.rb +127 -64
  173. data/man/ri.1 +247 -0
  174. data/rdoc.gemspec +249 -0
  175. metadata +171 -291
  176. data/.autotest +0 -16
  177. data/.document +0 -5
  178. data/History.txt +0 -594
  179. data/LICENSE.txt +0 -57
  180. data/Manifest.txt +0 -158
  181. data/README.txt +0 -45
  182. data/RI.txt +0 -58
  183. data/bin/ri +0 -5
  184. data/lib/rdoc/gauntlet.rb +0 -52
  185. data/lib/rdoc/generator/template/darkfish/classpage.rhtml +0 -296
  186. data/lib/rdoc/generator/template/darkfish/filepage.rhtml +0 -124
  187. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -32
  188. data/lib/rdoc/generator/template/darkfish/js/quicksearch.js +0 -114
  189. data/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js +0 -10
  190. data/lib/rdoc/generator/template/darkfish/rdoc.css +0 -706
  191. data/lib/rdoc/markup/formatter_test_case.rb +0 -689
  192. data/lib/rdoc/markup/inline.rb +0 -137
  193. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -116
  194. data/lib/rdoc/ruby_lex.rb +0 -1291
  195. data/lib/rdoc/ruby_token.rb +0 -416
  196. data/test/README +0 -1
  197. data/test/binary.dat +0 -0
  198. data/test/hidden.zip.txt +0 -1
  199. data/test/test.ja.rdoc +0 -10
  200. data/test/test.ja.txt +0 -8
  201. data/test/test.txt +0 -1
  202. data/test/test_attribute_manager.rb +0 -120
  203. data/test/test_rdoc_alias.rb +0 -13
  204. data/test/test_rdoc_any_method.rb +0 -126
  205. data/test/test_rdoc_attr.rb +0 -61
  206. data/test/test_rdoc_class_module.rb +0 -233
  207. data/test/test_rdoc_code_object.rb +0 -165
  208. data/test/test_rdoc_constant.rb +0 -15
  209. data/test/test_rdoc_context.rb +0 -370
  210. data/test/test_rdoc_encoding.rb +0 -166
  211. data/test/test_rdoc_generator_darkfish.rb +0 -119
  212. data/test/test_rdoc_generator_ri.rb +0 -76
  213. data/test/test_rdoc_include.rb +0 -96
  214. data/test/test_rdoc_markup.rb +0 -37
  215. data/test/test_rdoc_markup_attribute_manager.rb +0 -240
  216. data/test/test_rdoc_markup_document.rb +0 -51
  217. data/test/test_rdoc_markup_paragraph.rb +0 -9
  218. data/test/test_rdoc_markup_parser.rb +0 -1395
  219. data/test/test_rdoc_markup_pre_process.rb +0 -185
  220. data/test/test_rdoc_markup_raw.rb +0 -27
  221. data/test/test_rdoc_markup_to_ansi.rb +0 -328
  222. data/test/test_rdoc_markup_to_bs.rb +0 -341
  223. data/test/test_rdoc_markup_to_html.rb +0 -335
  224. data/test/test_rdoc_markup_to_html_crossref.rb +0 -169
  225. data/test/test_rdoc_markup_to_rdoc.rb +0 -327
  226. data/test/test_rdoc_method_attr.rb +0 -122
  227. data/test/test_rdoc_normal_class.rb +0 -17
  228. data/test/test_rdoc_normal_module.rb +0 -31
  229. data/test/test_rdoc_options.rb +0 -342
  230. data/test/test_rdoc_parser.rb +0 -83
  231. data/test/test_rdoc_parser_c.rb +0 -912
  232. data/test/test_rdoc_parser_ruby.rb +0 -1754
  233. data/test/test_rdoc_parser_simple.rb +0 -99
  234. data/test/test_rdoc_rdoc.rb +0 -164
  235. data/test/test_rdoc_require.rb +0 -25
  236. data/test/test_rdoc_ri_driver.rb +0 -846
  237. data/test/test_rdoc_ri_paths.rb +0 -43
  238. data/test/test_rdoc_ri_store.rb +0 -352
  239. data/test/test_rdoc_ruby_lex.rb +0 -23
  240. data/test/test_rdoc_stats.rb +0 -38
  241. data/test/test_rdoc_task.rb +0 -92
  242. data/test/test_rdoc_text.rb +0 -251
  243. data/test/test_rdoc_top_level.rb +0 -120
  244. data/test/xref_data.rb +0 -62
  245. data/test/xref_test_case.rb +0 -61
  246. data.tar.gz.sig +0 -3
  247. metadata.gz.sig +0 -0
@@ -1,25 +1,25 @@
1
- require 'rdoc/markup/formatter'
2
- require 'rdoc/markup/inline'
3
-
1
+ # frozen_string_literal: true
4
2
  require 'cgi'
5
3
 
6
4
  ##
7
- # Outputs RDoc markup as HTML
5
+ # Outputs RDoc markup as HTML.
8
6
 
9
7
  class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
10
8
 
11
9
  include RDoc::Text
12
10
 
11
+ # :section: Utilities
12
+
13
13
  ##
14
14
  # Maps RDoc::Markup::Parser::LIST_TOKENS types to HTML tags
15
15
 
16
16
  LIST_TYPE_TO_HTML = {
17
- :BULLET => ['<ul>', '</ul>'],
18
- :LABEL => ['<dl>', '</dl>'],
19
- :LALPHA => ['<ol style="display: lower-alpha">', '</ol>'],
20
- :NOTE => ['<table class="rdoc-list">', '</table>'],
21
- :NUMBER => ['<ol>', '</ol>'],
22
- :UALPHA => ['<ol style="display: upper-alpha">', '</ol>'],
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
23
  }
24
24
 
25
25
  attr_reader :res # :nodoc:
@@ -27,157 +27,141 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
27
27
  attr_reader :list # :nodoc:
28
28
 
29
29
  ##
30
- # Path to this document for relative links
30
+ # The RDoc::CodeObject HTML is being generated for. This is used to
31
+ # generate namespaced URI fragments
31
32
 
32
- attr_accessor :from_path
33
+ attr_accessor :code_object
33
34
 
34
35
  ##
35
- # Converts a target url to one that is relative to a given path
36
-
37
- def self.gen_relative_url(path, target)
38
- from = File.dirname path
39
- to, to_file = File.split target
40
-
41
- from = from.split "/"
42
- to = to.split "/"
43
-
44
- from.delete '.'
45
- to.delete '.'
36
+ # Path to this document for relative links
46
37
 
47
- while from.size > 0 and to.size > 0 and from[0] == to[0] do
48
- from.shift
49
- to.shift
50
- end
38
+ attr_accessor :from_path
51
39
 
52
- from.fill ".."
53
- from.concat to
54
- from << to_file
55
- File.join(*from)
56
- end
40
+ # :section:
57
41
 
58
42
  ##
59
43
  # Creates a new formatter that will output HTML
60
44
 
61
- def initialize
45
+ def initialize options, markup = nil
62
46
  super
63
47
 
64
- @th = nil
48
+ @code_object = nil
49
+ @from_path = ''
65
50
  @in_list_entry = nil
66
51
  @list = nil
67
- @from_path = ''
68
-
69
- # external hyperlinks
70
- @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK)
52
+ @th = nil
53
+ @hard_break = "<br>\n"
71
54
 
72
- # and links of the form <text>[<url>]
73
- @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK)
55
+ init_regexp_handlings
74
56
 
75
57
  init_tags
76
58
  end
77
59
 
60
+ # :section: Regexp Handling
61
+ #
62
+ # These methods are used by regexp handling markup added by RDoc::Markup#add_regexp_handling.
63
+
78
64
  ##
79
- # Maps attributes to HTML tags
65
+ # Adds regexp handlings.
80
66
 
81
- def init_tags
82
- add_tag :BOLD, "<b>", "</b>"
83
- add_tag :TT, "<tt>", "</tt>"
84
- add_tag :EM, "<em>", "</em>"
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
85
72
  end
86
73
 
87
74
  ##
88
- # Generate a hyperlink for +url+, labeled with +text+. Handles the special
89
- # cases for img: and link: described under handle_special_HYPERLINK
90
-
91
- def gen_url(url, text)
92
- if url =~ /([A-Za-z]+):(.*)/ then
93
- type = $1
94
- path = $2
95
- else
96
- type = "http"
97
- path = url
98
- url = "http://#{url}"
99
- end
75
+ # Adds regexp handlings about link notations.
100
76
 
101
- if type == "link" then
102
- url = if path[0, 1] == '#' then # is this meaningful?
103
- path
104
- else
105
- self.class.gen_relative_url @from_path, path
106
- end
107
- end
77
+ def init_link_notation_regexp_handlings
78
+ add_regexp_handling_RDOCLINK
79
+ add_regexp_handling_TIDYLINK
80
+ end
108
81
 
109
- if (type == "http" or type == "link") and
110
- url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
111
- "<img src=\"#{url}\" />"
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=\"#{$'}\">"
112
99
  else
113
- "<a href=\"#{url}\">#{text.sub(%r{^#{type}:/*}, '')}</a>"
100
+ url =~ /\Ardoc-[a-z]+:/
101
+
102
+ $'
114
103
  end
115
104
  end
116
105
 
117
- # :section: Special handling
106
+ ##
107
+ # +target+ is a <code><br></code>
108
+
109
+ def handle_regexp_HARD_BREAK target
110
+ '<br>'
111
+ end
118
112
 
119
113
  ##
120
- # And we're invoked with a potential external hyperlink. <tt>mailto:</tt>
121
- # just gets inserted. <tt>http:</tt> links are checked to see if they
122
- # reference an image. If so, that image gets inserted using an
123
- # <tt><img></tt> tag. Otherwise a conventional <tt><a href></tt> is used.
124
- # We also support a special type of hyperlink, <tt>link:</tt>, which is a
125
- # reference to a local file whose path is relative to the --op directory.
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
126
127
 
127
- def handle_special_HYPERLINK(special)
128
- url = special.text
129
128
  gen_url url, url
130
129
  end
131
130
 
132
131
  ##
133
- # Here's a hypedlink where the label is different to the URL
134
- # <label>[url] or {long label}[url]
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>
135
147
 
136
- def handle_special_TIDYLINK(special)
137
- text = special.text
148
+ def handle_regexp_TIDYLINK(target)
149
+ text = target.text
138
150
 
139
- return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
151
+ return text unless
152
+ text =~ /^\{(.*)\}\[(.*?)\]$/ or text =~ /^(\S+)\[(.*?)\]$/
140
153
 
141
154
  label = $1
142
155
  url = $2
143
- gen_url url, label
144
- end
145
156
 
146
- # :section: Utilities
157
+ label = handle_RDOCLINK label if /^rdoc-image:/ =~ label
147
158
 
148
- ##
149
- # Wraps +txt+ to +line_len+
150
-
151
- def wrap(txt, line_len = 76)
152
- res = []
153
- sp = 0
154
- ep = txt.length
155
-
156
- while sp < ep
157
- # scan back for a space
158
- p = sp + line_len - 1
159
- if p >= ep
160
- p = ep
161
- else
162
- while p > sp and txt[p] != ?\s
163
- p -= 1
164
- end
165
- if p <= sp
166
- p = sp + line_len
167
- while p < ep and txt[p] != ?\s
168
- p += 1
169
- end
170
- end
171
- end
172
- res << txt[sp...p] << "\n"
173
- sp = p
174
- sp += 1 while sp < ep and txt[sp] == ?\s
175
- end
176
-
177
- res.join.strip
159
+ gen_url url, label
178
160
  end
179
161
 
180
162
  # :section: Visitor
163
+ #
164
+ # These methods implement the HTML visitor.
181
165
 
182
166
  ##
183
167
  # Prepares the visitor for HTML generation
@@ -195,31 +179,65 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
195
179
  @res.join
196
180
  end
197
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
+
198
195
  ##
199
196
  # Adds +paragraph+ to the output
200
197
 
201
- def accept_paragraph(paragraph)
198
+ def accept_paragraph paragraph
202
199
  @res << "\n<p>"
203
- @res << wrap(to_html(paragraph.text))
200
+ text = paragraph.text @hard_break
201
+ text = text.gsub(/\r?\n/, ' ')
202
+ @res << to_html(text)
204
203
  @res << "</p>\n"
205
204
  end
206
205
 
207
206
  ##
208
207
  # Adds +verbatim+ to the output
209
208
 
210
- def accept_verbatim(verbatim)
211
- @res << "\n<pre>"
212
- @res << CGI.escapeHTML(verbatim.text.rstrip)
213
- @res << "</pre>\n"
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
214
234
  end
215
235
 
216
236
  ##
217
237
  # Adds +rule+ to the output
218
238
 
219
- def accept_rule(rule)
220
- size = rule.weight
221
- size = 10 if size > 10
222
- @res << "<hr style=\"height: #{size}px\">\n"
239
+ def accept_rule rule
240
+ @res << "<hr>\n"
223
241
  end
224
242
 
225
243
  ##
@@ -268,12 +286,25 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
268
286
  end
269
287
 
270
288
  ##
271
- # Adds +heading+ to the output
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
272
296
 
273
- def accept_heading(heading)
274
- @res << "\n<h#{heading.level}>"
297
+ @res << if @options.output_decoration
298
+ "\n<h#{level} id=\"#{label}\">"
299
+ else
300
+ "\n<h#{level}>"
301
+ end
275
302
  @res << to_html(heading.text)
276
- @res << "</h#{heading.level}>\n"
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"
277
308
  end
278
309
 
279
310
  ##
@@ -284,12 +315,63 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
284
315
  end
285
316
 
286
317
  ##
287
- # CGI escapes +text+
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+
288
344
 
289
345
  def convert_string(text)
290
346
  CGI.escapeHTML text
291
347
  end
292
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
+
293
375
  ##
294
376
  # Determines the HTML list element for +list_type+ and +open_tag+
295
377
 
@@ -299,6 +381,15 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
299
381
  tags[open_tag ? 0 : 1]
300
382
  end
301
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
+
302
393
  ##
303
394
  # Returns the HTML tag for +list_type+, possible using a label from
304
395
  # +list_item+
@@ -307,10 +398,10 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
307
398
  case list_type
308
399
  when :BULLET, :LALPHA, :NUMBER, :UALPHA then
309
400
  "<li>"
310
- when :LABEL then
311
- "<dt>#{to_html list_item.label}</dt>\n<dd>"
312
- when :NOTE then
313
- "<tr><td class=\"rdoc-term\"><p>#{to_html list_item.label}</p></td>\n<td>"
401
+ when :LABEL, :NOTE then
402
+ Array(list_item.label).map do |label|
403
+ "<dt>#{to_html label}\n"
404
+ end.join << "<dd>"
314
405
  else
315
406
  raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
316
407
  end
@@ -323,15 +414,25 @@ class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
323
414
  case list_type
324
415
  when :BULLET, :LALPHA, :NUMBER, :UALPHA then
325
416
  "</li>"
326
- when :LABEL then
417
+ when :LABEL, :NOTE then
327
418
  "</dd>"
328
- when :NOTE then
329
- "</td></tr>"
330
419
  else
331
420
  raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
332
421
  end
333
422
  end
334
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
+
335
436
  ##
336
437
  # Converts +item+ to HTML using RDoc::Text#to_html
337
438