rdoc 6.3.4.1 → 8.0.0

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 (205) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +195 -0
  3. data/History.rdoc +65 -63
  4. data/LEGAL.rdoc +7 -1
  5. data/LICENSE.rdoc +6 -0
  6. data/README.md +236 -0
  7. data/RI.md +842 -0
  8. data/TODO.rdoc +8 -7
  9. data/doc/markup_reference/markdown.md +659 -0
  10. data/doc/markup_reference/rdoc.rdoc +1169 -0
  11. data/exe/rdoc +0 -1
  12. data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -18
  13. data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +50 -24
  14. data/lib/rdoc/{attr.rb → code_object/attr.rb} +16 -14
  15. data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +225 -58
  16. data/lib/rdoc/{constant.rb → code_object/constant.rb} +44 -10
  17. data/lib/rdoc/code_object/context/section.rb +182 -0
  18. data/lib/rdoc/{context.rb → code_object/context.rb} +78 -106
  19. data/lib/rdoc/{extend.rb → code_object/extend.rb} +0 -1
  20. data/lib/rdoc/{include.rb → code_object/include.rb} +0 -1
  21. data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +46 -48
  22. data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +6 -4
  23. data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +2 -3
  24. data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
  25. data/lib/rdoc/{require.rb → code_object/require.rb} +1 -2
  26. data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +5 -1
  27. data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +60 -63
  28. data/lib/rdoc/code_object.rb +11 -39
  29. data/lib/rdoc/code_objects.rb +1 -2
  30. data/lib/rdoc/comment.rb +202 -99
  31. data/lib/rdoc/cross_reference.rb +75 -62
  32. data/lib/rdoc/encoding.rb +8 -24
  33. data/lib/rdoc/erb_partial.rb +1 -2
  34. data/lib/rdoc/erbio.rb +3 -8
  35. data/lib/rdoc/generator/aliki.rb +200 -0
  36. data/lib/rdoc/generator/darkfish.rb +156 -122
  37. data/lib/rdoc/generator/json_index.rb +8 -24
  38. data/lib/rdoc/generator/markup.rb +70 -34
  39. data/lib/rdoc/generator/pot/message_extractor.rb +7 -7
  40. data/lib/rdoc/generator/pot/po.rb +1 -1
  41. data/lib/rdoc/generator/pot/po_entry.rb +8 -8
  42. data/lib/rdoc/generator/pot.rb +1 -5
  43. data/lib/rdoc/generator/ri.rb +1 -2
  44. data/lib/rdoc/generator/template/aliki/DESIGN.md +536 -0
  45. data/lib/rdoc/generator/template/aliki/_aside_toc.rhtml +8 -0
  46. data/lib/rdoc/generator/template/aliki/_footer.rhtml +23 -0
  47. data/lib/rdoc/generator/template/aliki/_head.rhtml +163 -0
  48. data/lib/rdoc/generator/template/aliki/_header.rhtml +56 -0
  49. data/lib/rdoc/generator/template/aliki/_icons.rhtml +208 -0
  50. data/lib/rdoc/generator/template/aliki/_sidebar_ancestors.rhtml +16 -0
  51. data/lib/rdoc/generator/template/aliki/_sidebar_classes.rhtml +15 -0
  52. data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +27 -0
  53. data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +27 -0
  54. data/lib/rdoc/generator/template/aliki/_sidebar_installed.rhtml +16 -0
  55. data/lib/rdoc/generator/template/aliki/_sidebar_methods.rhtml +41 -0
  56. data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +67 -0
  57. data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +15 -0
  58. data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +21 -0
  59. data/lib/rdoc/generator/template/aliki/_sidebar_toggle.rhtml +3 -0
  60. data/lib/rdoc/generator/template/aliki/class.rhtml +230 -0
  61. data/lib/rdoc/generator/template/aliki/css/rdoc.css +2181 -0
  62. data/lib/rdoc/generator/template/aliki/index.rhtml +22 -0
  63. data/lib/rdoc/generator/template/aliki/js/aliki.js +513 -0
  64. data/lib/rdoc/generator/template/aliki/js/bash_highlighter.js +167 -0
  65. data/lib/rdoc/generator/template/aliki/js/c_highlighter.js +299 -0
  66. data/lib/rdoc/generator/template/aliki/js/search_controller.js +129 -0
  67. data/lib/rdoc/generator/template/aliki/js/search_navigation.js +105 -0
  68. data/lib/rdoc/generator/template/aliki/js/search_ranker.js +239 -0
  69. data/lib/rdoc/generator/template/aliki/js/theme-toggle.js +112 -0
  70. data/lib/rdoc/generator/template/aliki/page.rhtml +18 -0
  71. data/lib/rdoc/generator/template/aliki/servlet_not_found.rhtml +14 -0
  72. data/lib/rdoc/generator/template/aliki/servlet_root.rhtml +65 -0
  73. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +3 -3
  74. data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -14
  75. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
  76. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +11 -9
  77. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +11 -9
  78. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +7 -6
  79. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +20 -11
  80. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +25 -5
  81. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
  82. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +2 -1
  83. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  84. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +28 -7
  85. data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
  86. data/lib/rdoc/generator/template/darkfish/class.rhtml +138 -90
  87. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +420 -358
  88. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  89. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  90. data/lib/rdoc/generator/template/darkfish/index.rhtml +14 -12
  91. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +59 -3
  92. data/lib/rdoc/generator/template/darkfish/js/search.js +15 -5
  93. data/lib/rdoc/generator/template/darkfish/page.rhtml +7 -6
  94. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +12 -9
  95. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +24 -21
  96. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +35 -21
  97. data/lib/rdoc/generator/template/json_index/js/navigation.js +8 -8
  98. data/lib/rdoc/generator/template/json_index/js/searcher.js +48 -6
  99. data/lib/rdoc/generator.rb +6 -5
  100. data/lib/rdoc/i18n/text.rb +3 -3
  101. data/lib/rdoc/i18n.rb +1 -1
  102. data/lib/rdoc/known_classes.rb +5 -4
  103. data/lib/rdoc/markdown/entities.rb +0 -1
  104. data/lib/rdoc/markdown/literals.kpeg +0 -2
  105. data/lib/rdoc/markdown/literals.rb +0 -1
  106. data/lib/rdoc/markdown.kpeg +140 -62
  107. data/lib/rdoc/markdown.rb +1015 -873
  108. data/lib/rdoc/markup/blank_line.rb +25 -24
  109. data/lib/rdoc/markup/block_quote.rb +1 -2
  110. data/lib/rdoc/markup/document.rb +10 -11
  111. data/lib/rdoc/markup/element.rb +21 -0
  112. data/lib/rdoc/markup/formatter.rb +134 -115
  113. data/lib/rdoc/markup/hard_break.rb +30 -28
  114. data/lib/rdoc/markup/heading.rb +163 -72
  115. data/lib/rdoc/markup/include.rb +3 -4
  116. data/lib/rdoc/markup/indented_paragraph.rb +4 -5
  117. data/lib/rdoc/markup/inline_parser.rb +312 -0
  118. data/lib/rdoc/markup/list.rb +6 -7
  119. data/lib/rdoc/markup/list_item.rb +6 -7
  120. data/lib/rdoc/markup/paragraph.rb +2 -3
  121. data/lib/rdoc/markup/parser.rb +29 -19
  122. data/lib/rdoc/markup/pre_process.rb +39 -18
  123. data/lib/rdoc/markup/raw.rb +52 -56
  124. data/lib/rdoc/markup/rule.rb +2 -3
  125. data/lib/rdoc/markup/table.rb +49 -32
  126. data/lib/rdoc/markup/to_ansi.rb +58 -8
  127. data/lib/rdoc/markup/to_bs.rb +47 -38
  128. data/lib/rdoc/markup/to_html.rb +343 -105
  129. data/lib/rdoc/markup/to_html_crossref.rb +143 -58
  130. data/lib/rdoc/markup/to_html_snippet.rb +78 -76
  131. data/lib/rdoc/markup/to_joined_paragraph.rb +3 -9
  132. data/lib/rdoc/markup/to_label.rb +34 -25
  133. data/lib/rdoc/markup/to_markdown.rb +74 -51
  134. data/lib/rdoc/markup/to_rdoc.rb +141 -82
  135. data/lib/rdoc/markup/to_table_of_contents.rb +4 -5
  136. data/lib/rdoc/markup/to_test.rb +10 -3
  137. data/lib/rdoc/markup/to_tt_only.rb +17 -31
  138. data/lib/rdoc/markup/verbatim.rb +5 -6
  139. data/lib/rdoc/markup.rb +59 -707
  140. data/lib/rdoc/options.rb +228 -101
  141. data/lib/rdoc/parser/c.rb +186 -184
  142. data/lib/rdoc/parser/changelog.rb +57 -13
  143. data/lib/rdoc/parser/markdown.rb +0 -2
  144. data/lib/rdoc/parser/rbs.rb +275 -0
  145. data/lib/rdoc/parser/rd.rb +0 -1
  146. data/lib/rdoc/parser/ruby.rb +963 -2024
  147. data/lib/rdoc/parser/ruby_colorizer.rb +253 -0
  148. data/lib/rdoc/parser/simple.rb +6 -23
  149. data/lib/rdoc/parser/text.rb +0 -1
  150. data/lib/rdoc/parser.rb +35 -14
  151. data/lib/rdoc/rbs_helper.rb +186 -0
  152. data/lib/rdoc/rd/block_parser.rb +659 -11
  153. data/lib/rdoc/rd/block_parser.ry +13 -9
  154. data/lib/rdoc/rd/inline.rb +4 -5
  155. data/lib/rdoc/rd/inline_parser.rb +646 -2
  156. data/lib/rdoc/rd.rb +4 -5
  157. data/lib/rdoc/rdoc.rb +234 -90
  158. data/lib/rdoc/ri/driver.rb +172 -172
  159. data/lib/rdoc/ri/paths.rb +3 -3
  160. data/lib/rdoc/{servlet.rb → ri/servlet.rb} +28 -27
  161. data/lib/rdoc/ri/store.rb +0 -1
  162. data/lib/rdoc/ri/task.rb +3 -3
  163. data/lib/rdoc/ri.rb +5 -5
  164. data/lib/rdoc/rubygems_hook.rb +106 -25
  165. data/lib/rdoc/server.rb +460 -0
  166. data/lib/rdoc/stats/normal.rb +1 -1
  167. data/lib/rdoc/stats/quiet.rb +1 -2
  168. data/lib/rdoc/stats/verbose.rb +3 -5
  169. data/lib/rdoc/stats.rb +158 -136
  170. data/lib/rdoc/store.rb +267 -48
  171. data/lib/rdoc/task.rb +54 -28
  172. data/lib/rdoc/text.rb +60 -120
  173. data/lib/rdoc/token_stream.rb +30 -45
  174. data/lib/rdoc/tom_doc.rb +9 -15
  175. data/lib/rdoc/version.rb +3 -1
  176. data/lib/rdoc.rb +90 -52
  177. data/lib/rubygems_plugin.rb +14 -0
  178. data/man/ri.1 +2 -0
  179. data/rdoc-logo.svg +43 -0
  180. data/rdoc.gemspec +25 -200
  181. metadata +120 -53
  182. data/CONTRIBUTING.rdoc +0 -220
  183. data/ExampleMarkdown.md +0 -37
  184. data/ExampleRDoc.rdoc +0 -208
  185. data/Gemfile +0 -12
  186. data/README.rdoc +0 -129
  187. data/RI.rdoc +0 -57
  188. data/Rakefile +0 -101
  189. data/bin/console +0 -7
  190. data/bin/setup +0 -6
  191. data/lib/rdoc/anon_class.rb +0 -11
  192. data/lib/rdoc/context/section.rb +0 -232
  193. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  194. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
  195. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
  196. data/lib/rdoc/generator/template/json_index/.document +0 -1
  197. data/lib/rdoc/ghost_method.rb +0 -7
  198. data/lib/rdoc/markup/attr_changer.rb +0 -23
  199. data/lib/rdoc/markup/attr_span.rb +0 -36
  200. data/lib/rdoc/markup/attribute_manager.rb +0 -409
  201. data/lib/rdoc/markup/attributes.rb +0 -71
  202. data/lib/rdoc/markup/regexp_handling.rb +0 -41
  203. data/lib/rdoc/meta_method.rb +0 -7
  204. data/lib/rdoc/parser/ripper_state_lex.rb +0 -590
  205. data/lib/rdoc/parser/ruby_tools.rb +0 -167
@@ -9,7 +9,7 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
9
9
  ##
10
10
  # Creates a new formatter that will output Markdown format text
11
11
 
12
- def initialize markup = nil
12
+ def initialize
13
13
  super
14
14
 
15
15
  @headings[1] = ['# ', '']
@@ -20,46 +20,29 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
20
20
  @headings[6] = ['###### ', '']
21
21
 
22
22
  add_regexp_handling_RDOCLINK
23
- add_regexp_handling_TIDYLINK
24
23
 
25
24
  @hard_break = " \n"
26
25
  end
27
26
 
28
- ##
29
- # Maps attributes to HTML sequences
30
-
31
- def init_tags
32
- add_tag :BOLD, '**', '**'
33
- add_tag :EM, '*', '*'
34
- add_tag :TT, '`', '`'
35
- end
36
-
37
- ##
38
- # Adds a newline to the output
39
-
40
- def handle_regexp_HARD_BREAK target
41
- " \n"
42
- end
43
-
44
27
  ##
45
28
  # Finishes consumption of `list`
46
29
 
47
- def accept_list_end list
48
- @res << "\n"
49
-
30
+ def accept_list_end(list)
50
31
  super
51
32
  end
52
33
 
53
34
  ##
54
35
  # Finishes consumption of `list_item`
55
36
 
56
- def accept_list_item_end list_item
37
+ def accept_list_item_end(list_item)
57
38
  width = case @list_type.last
58
39
  when :BULLET then
59
40
  4
60
41
  when :NOTE, :LABEL then
61
42
  use_prefix
62
43
 
44
+ @res << "\n"
45
+
63
46
  4
64
47
  else
65
48
  @list_index[-1] = @list_index.last.succ
@@ -72,7 +55,7 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
72
55
  ##
73
56
  # Prepares the visitor for consuming `list_item`
74
57
 
75
- def accept_list_item_start list_item
58
+ def accept_list_item_start(list_item)
76
59
  type = @list_type.last
77
60
 
78
61
  case type
@@ -81,11 +64,11 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
81
64
  attributes(label).strip
82
65
  end.join "\n"
83
66
 
84
- bullets << "\n:"
67
+ bullets << "\n" unless bullets.empty?
85
68
 
86
69
  @prefix = ' ' * @indent
87
70
  @indent += 4
88
- @prefix << bullets + (' ' * (@indent - 1))
71
+ @prefix << bullets << ":" << (' ' * (@indent - 1))
89
72
  else
90
73
  bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
91
74
  @prefix = (' ' * @indent) + bullet.ljust(4)
@@ -94,10 +77,69 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
94
77
  end
95
78
  end
96
79
 
80
+ def add_tag(tag, simple_tag, content)
81
+ if content.match?(/\A[\w\s]+\z/)
82
+ emit_inline("#{simple_tag}#{content}#{simple_tag}")
83
+ else
84
+ emit_inline("<#{tag}>#{content}</#{tag}>")
85
+ end
86
+ end
87
+
88
+ def handle_tag(nodes, simple_tag, tag)
89
+ if nodes.size == 1 && String === nodes[0]
90
+ content = apply_regexp_handling(nodes[0]).map do |text, converted|
91
+ converted ? text : convert_string(text)
92
+ end.join
93
+ add_tag(tag, simple_tag, content)
94
+ else
95
+ emit_inline("<#{tag}>")
96
+ traverse_inline_nodes(nodes)
97
+ emit_inline("</#{tag}>")
98
+ end
99
+ end
100
+
101
+ def handle_TIDYLINK(label_part, url)
102
+ if url =~ /^rdoc-label:foot/ then
103
+ emit_inline(handle_rdoc_link(url))
104
+ else
105
+ emit_inline('[')
106
+ traverse_inline_nodes(label_part)
107
+ emit_inline("](#{url})")
108
+ end
109
+ end
110
+
111
+ def handle_BOLD(nodes)
112
+ handle_tag(nodes, '**', 'strong')
113
+ end
114
+
115
+ def handle_EM(nodes)
116
+ handle_tag(nodes, '*', 'em')
117
+ end
118
+
119
+ def handle_BOLD_WORD(word)
120
+ add_tag('strong', '**', convert_string(word))
121
+ end
122
+
123
+ def handle_EM_WORD(word)
124
+ add_tag('em', '*', convert_string(word))
125
+ end
126
+
127
+ def handle_TT(text)
128
+ add_tag('code', '`', convert_string(text))
129
+ end
130
+
131
+ def handle_STRIKE(nodes)
132
+ handle_tag(nodes, '~~', 's')
133
+ end
134
+
135
+ def handle_HARD_BREAK
136
+ emit_inline(" \n")
137
+ end
138
+
97
139
  ##
98
140
  # Prepares the visitor for consuming `list`
99
141
 
100
- def accept_list_start list
142
+ def accept_list_start(list)
101
143
  case list.type
102
144
  when :BULLET, :LABEL, :NOTE then
103
145
  @list_index << nil
@@ -114,7 +156,7 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
114
156
  ##
115
157
  # Adds `rule` to the output
116
158
 
117
- def accept_rule rule
159
+ def accept_rule(rule)
118
160
  use_prefix or @res << ' ' * @indent
119
161
  @res << '-' * 3
120
162
  @res << "\n"
@@ -123,7 +165,7 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
123
165
  ##
124
166
  # Outputs `verbatim` indented 4 columns
125
167
 
126
- def accept_verbatim verbatim
168
+ def accept_verbatim(verbatim)
127
169
  indent = ' ' * (@indent + 4)
128
170
 
129
171
  verbatim.parts.each do |part|
@@ -137,7 +179,7 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
137
179
  ##
138
180
  # Creates a Markdown-style URL from +url+ with +text+.
139
181
 
140
- def gen_url url, text
182
+ def gen_url(url, text)
141
183
  scheme, url, = parse_url url
142
184
 
143
185
  "[#{text.sub(%r{^#{scheme}:/*}i, '')}](#{url})"
@@ -146,7 +188,7 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
146
188
  ##
147
189
  # Handles <tt>rdoc-</tt> type links for footnotes.
148
190
 
149
- def handle_rdoc_link url
191
+ def handle_rdoc_link(url)
150
192
  case url
151
193
  when /^rdoc-ref:/ then
152
194
  $'
@@ -163,30 +205,11 @@ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
163
205
  end
164
206
  end
165
207
 
166
- ##
167
- # Converts the RDoc markup tidylink into a Markdown.style link.
168
-
169
- def handle_regexp_TIDYLINK target
170
- text = target.text
171
-
172
- return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
173
-
174
- label = $1
175
- url = $2
176
-
177
- if url =~ /^rdoc-label:foot/ then
178
- handle_rdoc_link url
179
- else
180
- gen_url url, label
181
- end
182
- end
183
-
184
208
  ##
185
209
  # Converts the rdoc-...: links into a Markdown.style links.
186
210
 
187
- def handle_regexp_RDOCLINK target
188
- handle_rdoc_link target.text
211
+ def handle_regexp_RDOCLINK(text)
212
+ handle_rdoc_link text
189
213
  end
190
214
 
191
215
  end
192
-
@@ -3,6 +3,16 @@
3
3
  # Outputs RDoc markup as RDoc markup! (mostly)
4
4
 
5
5
  class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
6
+ DEFAULT_HEADINGS = {
7
+ 1 => ['= ', ''],
8
+ 2 => ['== ', ''],
9
+ 3 => ['=== ', ''],
10
+ 4 => ['==== ', ''],
11
+ 5 => ['===== ', ''],
12
+ 6 => ['====== ', '']
13
+ }
14
+ DEFAULT_HEADINGS.default = []
15
+ DEFAULT_HEADINGS.freeze
6
16
 
7
17
  ##
8
18
  # Current indent amount for output in characters
@@ -42,46 +52,27 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
42
52
  ##
43
53
  # Creates a new formatter that will output (mostly) \RDoc markup
44
54
 
45
- def initialize markup = nil
46
- super nil, markup
55
+ def initialize
56
+ super
47
57
 
48
58
  @markup.add_regexp_handling(/\\\S/, :SUPPRESSED_CROSSREF)
49
59
  @width = 78
50
- init_tags
51
-
52
- @headings = {}
53
- @headings.default = []
54
-
55
- @headings[1] = ['= ', '']
56
- @headings[2] = ['== ', '']
57
- @headings[3] = ['=== ', '']
58
- @headings[4] = ['==== ', '']
59
- @headings[5] = ['===== ', '']
60
- @headings[6] = ['====== ', '']
61
60
 
61
+ @headings = DEFAULT_HEADINGS.dup
62
62
  @hard_break = "\n"
63
63
  end
64
64
 
65
- ##
66
- # Maps attributes to HTML sequences
67
-
68
- def init_tags
69
- add_tag :BOLD, "<b>", "</b>"
70
- add_tag :TT, "<tt>", "</tt>"
71
- add_tag :EM, "<em>", "</em>"
72
- end
73
-
74
65
  ##
75
66
  # Adds +blank_line+ to the output
76
67
 
77
- def accept_blank_line blank_line
68
+ def accept_blank_line(blank_line)
78
69
  @res << "\n"
79
70
  end
80
71
 
81
72
  ##
82
73
  # Adds +paragraph+ to the output
83
74
 
84
- def accept_block_quote block_quote
75
+ def accept_block_quote(block_quote)
85
76
  @indent += 2
86
77
 
87
78
  block_quote.parts.each do |part|
@@ -96,7 +87,7 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
96
87
  ##
97
88
  # Adds +heading+ to the output
98
89
 
99
- def accept_heading heading
90
+ def accept_heading(heading)
100
91
  use_prefix or @res << ' ' * @indent
101
92
  @res << @headings[heading.level][0]
102
93
  @res << attributes(heading.text)
@@ -107,7 +98,7 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
107
98
  ##
108
99
  # Finishes consumption of +list+
109
100
 
110
- def accept_list_end list
101
+ def accept_list_end(list)
111
102
  @list_index.pop
112
103
  @list_type.pop
113
104
  @list_width.pop
@@ -116,7 +107,7 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
116
107
  ##
117
108
  # Finishes consumption of +list_item+
118
109
 
119
- def accept_list_item_end list_item
110
+ def accept_list_item_end(list_item)
120
111
  width = case @list_type.last
121
112
  when :BULLET then
122
113
  2
@@ -140,16 +131,24 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
140
131
  ##
141
132
  # Prepares the visitor for consuming +list_item+
142
133
 
143
- def accept_list_item_start list_item
134
+ def accept_list_item_start(list_item)
144
135
  type = @list_type.last
145
136
 
146
137
  case type
147
138
  when :NOTE, :LABEL then
148
- bullets = Array(list_item.label).map do |label|
139
+ stripped_labels = Array(list_item.label).map do |label|
149
140
  attributes(label).strip
150
- end.join "\n"
141
+ end
151
142
 
152
- bullets << ":\n" unless bullets.empty?
143
+ bullets = case type
144
+ when :NOTE
145
+ stripped_labels.map { |b| "#{b}::" }
146
+ when :LABEL
147
+ stripped_labels.map { |b| "[#{b}]" }
148
+ end
149
+
150
+ bullets = bullets.join("\n")
151
+ bullets << "\n" unless stripped_labels.empty?
153
152
 
154
153
  @prefix = ' ' * @indent
155
154
  @indent += 2
@@ -165,7 +164,7 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
165
164
  ##
166
165
  # Prepares the visitor for consuming +list+
167
166
 
168
- def accept_list_start list
167
+ def accept_list_start(list)
169
168
  case list.type
170
169
  when :BULLET then
171
170
  @list_index << nil
@@ -192,7 +191,7 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
192
191
  ##
193
192
  # Adds +paragraph+ to the output
194
193
 
195
- def accept_paragraph paragraph
194
+ def accept_paragraph(paragraph)
196
195
  text = paragraph.text @hard_break
197
196
  wrap attributes text
198
197
  end
@@ -200,7 +199,7 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
200
199
  ##
201
200
  # Adds +paragraph+ to the output
202
201
 
203
- def accept_indented_paragraph paragraph
202
+ def accept_indented_paragraph(paragraph)
204
203
  @indent += paragraph.indent
205
204
  text = paragraph.text @hard_break
206
205
  wrap attributes text
@@ -210,14 +209,14 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
210
209
  ##
211
210
  # Adds +raw+ to the output
212
211
 
213
- def accept_raw raw
212
+ def accept_raw(raw)
214
213
  @res << raw.parts.join("\n")
215
214
  end
216
215
 
217
216
  ##
218
217
  # Adds +rule+ to the output
219
218
 
220
- def accept_rule rule
219
+ def accept_rule(rule)
221
220
  use_prefix or @res << ' ' * @indent
222
221
  @res << '-' * (@width - @indent)
223
222
  @res << "\n"
@@ -226,7 +225,7 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
226
225
  ##
227
226
  # Outputs +verbatim+ indented 2 columns
228
227
 
229
- def accept_verbatim verbatim
228
+ def accept_verbatim(verbatim)
230
229
  indent = ' ' * (@indent + 2)
231
230
 
232
231
  verbatim.parts.each do |part|
@@ -240,13 +239,15 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
240
239
  ##
241
240
  # Adds +table+ to the output
242
241
 
243
- def accept_table header, body, aligns
244
- widths = header.zip(body) do |h, b|
245
- [h.size, b.size].max
242
+ def accept_table(header, body, aligns)
243
+ header = header.map { |h| attributes h }
244
+ body = body.map { |row| row.map { |t| attributes t } }
245
+ widths = header.zip(*body).map do |cols|
246
+ cols.compact.map { |col| calculate_text_width(col) }.max
246
247
  end
247
248
  aligns = aligns.map do |a|
248
249
  case a
249
- when nil
250
+ when nil, :center
250
251
  :center
251
252
  when :left
252
253
  :ljust
@@ -254,23 +255,108 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
254
255
  :rjust
255
256
  end
256
257
  end
257
- @res << header.zip(widths, aligns) do |h, w, a|
258
- h.__send__(a, w)
258
+ @res << header.zip(widths, aligns).map do |h, w, a|
259
+ extra_width = h.size - calculate_text_width(h)
260
+ h.__send__(a, w + extra_width)
259
261
  end.join("|").rstrip << "\n"
260
262
  @res << widths.map {|w| "-" * w }.join("|") << "\n"
261
263
  body.each do |row|
262
- @res << row.zip(widths, aligns) do |t, w, a|
263
- t.__send__(a, w)
264
+ @res << widths.zip(aligns).each_with_index.map do |(w, a), i|
265
+ t = row[i] || ""
266
+ extra_width = t.size - calculate_text_width(t)
267
+ t.__send__(a, w + extra_width)
264
268
  end.join("|").rstrip << "\n"
265
269
  end
266
270
  end
267
271
 
272
+ def calculate_text_width(text)
273
+ text.size
274
+ end
275
+
276
+ def handle_PLAIN_TEXT(text)
277
+ add_text(text)
278
+ end
279
+
280
+ def handle_REGEXP_HANDLING_TEXT(text)
281
+ add_text(text)
282
+ end
283
+
284
+ def handle_BOLD(target)
285
+ on(:BOLD)
286
+ super
287
+ off(:BOLD)
288
+ end
289
+
290
+ def handle_EM(target)
291
+ on(:EM)
292
+ super
293
+ off(:EM)
294
+ end
295
+
296
+ def handle_BOLD_WORD(word)
297
+ on(:BOLD)
298
+ super
299
+ off(:BOLD)
300
+ end
301
+
302
+ def handle_EM_WORD(word)
303
+ on(:EM)
304
+ super
305
+ off(:EM)
306
+ end
307
+
308
+ def handle_TT(code)
309
+ on(:TT)
310
+ super
311
+ off(:TT)
312
+ end
313
+
314
+ def handle_STRIKE(target)
315
+ on(:STRIKE)
316
+ super
317
+ off(:STRIKE)
318
+ end
319
+
320
+ def handle_HARD_BREAK
321
+ add_text("\n")
322
+ end
323
+
324
+ def handle_TIDYLINK(label_part, url)
325
+ super
326
+ add_text("( #{url} )")
327
+ end
328
+
329
+ def handle_inline(text, initial_attributes = [])
330
+ @attributes = Hash.new(0)
331
+ initial_attributes.each { |attr| on(attr) }
332
+ out = @inline_output = +''
333
+ super(text)
334
+ @inline_output = nil
335
+ out
336
+ end
337
+
338
+ def on(attr)
339
+ @attributes[attr] += 1
340
+ end
341
+
342
+ def off(attr)
343
+ @attributes[attr] -= 1
344
+ @attributes.delete(attr) if @attributes[attr] == 0
345
+ end
346
+
347
+ def add_text(text)
348
+ emit_inline(text)
349
+ end
350
+
351
+ def emit_inline(text)
352
+ @inline_output << text
353
+ end
354
+
268
355
  ##
269
- # Applies attribute-specific markup to +text+ using RDoc::AttributeManager
356
+ # Applies attribute-specific markup to +text+ using RDoc::Markup::InlineParser
270
357
 
271
- def attributes text
272
- flow = @am.flow text.dup
273
- convert_flow flow
358
+ def attributes(text)
359
+ handle_inline(text)
274
360
  end
275
361
 
276
362
  ##
@@ -283,17 +369,8 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
283
369
  ##
284
370
  # Removes preceding \\ from the suppressed crossref +target+
285
371
 
286
- def handle_regexp_SUPPRESSED_CROSSREF target
287
- text = target.text
288
- text = text.sub('\\', '') unless in_tt?
289
- text
290
- end
291
-
292
- ##
293
- # Adds a newline to the output
294
-
295
- def handle_regexp_HARD_BREAK target
296
- "\n"
372
+ def handle_regexp_SUPPRESSED_CROSSREF(text)
373
+ text.sub('\\', '')
297
374
  end
298
375
 
299
376
  ##
@@ -323,40 +400,22 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
323
400
  ##
324
401
  # Wraps +text+ to #width
325
402
 
326
- def wrap text
403
+ def wrap(text)
327
404
  return unless text && !text.empty?
328
405
 
329
406
  text_len = @width - @indent
330
407
 
331
408
  text_len = 20 if text_len < 20
332
409
 
333
- re = /^(.{0,#{text_len}})[ \n]/
334
410
  next_prefix = ' ' * @indent
335
411
 
336
412
  prefix = @prefix || next_prefix
337
413
  @prefix = nil
338
414
 
339
- @res << prefix
340
-
341
- while text.length > text_len
342
- if text =~ re then
343
- @res << $1
344
- text.slice!(0, $&.length)
345
- else
346
- @res << text.slice!(0, text_len)
347
- end
348
-
349
- @res << "\n" << next_prefix
350
- end
351
-
352
- if text.empty? then
353
- @res.pop
354
- @res.pop
355
- else
356
- @res << text
357
- @res << "\n"
415
+ text.scan(/\G(?:([^ \n]{#{text_len}})(?=[^ \n])|(.{1,#{text_len}})(?:[ \n]|\z))/) do
416
+ @res << prefix << ($1 || $2) << "\n"
417
+ prefix = next_prefix
358
418
  end
359
419
  end
360
420
 
361
421
  end
362
-
@@ -25,7 +25,7 @@ class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
25
25
  attr_accessor :omit_headings_below
26
26
 
27
27
  def initialize # :nodoc:
28
- super nil
28
+ super
29
29
 
30
30
  @omit_headings_below = nil
31
31
  end
@@ -33,7 +33,7 @@ class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
33
33
  ##
34
34
  # Adds +document+ to the output, using its heading cutoff if present
35
35
 
36
- def accept_document document
36
+ def accept_document(document)
37
37
  @omit_headings_below = document.omit_headings_below
38
38
 
39
39
  super
@@ -42,7 +42,7 @@ class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
42
42
  ##
43
43
  # Adds +heading+ to the table of contents
44
44
 
45
- def accept_heading heading
45
+ def accept_heading(heading)
46
46
  @res << heading unless suppressed? heading
47
47
  end
48
48
 
@@ -64,7 +64,7 @@ class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
64
64
  ##
65
65
  # Returns true if +heading+ is below the display threshold
66
66
 
67
- def suppressed? heading
67
+ def suppressed?(heading)
68
68
  return false unless @omit_headings_below
69
69
 
70
70
  heading.level > @omit_headings_below
@@ -86,4 +86,3 @@ class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
86
86
  # :startdoc:
87
87
 
88
88
  end
89
-
@@ -18,11 +18,19 @@ class RDoc::Markup::ToTest < RDoc::Markup::Formatter
18
18
  @res
19
19
  end
20
20
 
21
+ def handle_PLAIN_TEXT(text)
22
+ @res << text
23
+ end
24
+
25
+ def handle_REGEXP_HANDLING_TEXT(text)
26
+ @res << text
27
+ end
28
+
21
29
  def accept_paragraph(paragraph)
22
- @res << convert_flow(@am.flow(paragraph.text))
30
+ handle_inline(paragraph.text)
23
31
  end
24
32
 
25
- def accept_raw raw
33
+ def accept_raw(raw)
26
34
  @res << raw.parts.join
27
35
  end
28
36
 
@@ -67,4 +75,3 @@ class RDoc::Markup::ToTest < RDoc::Markup::Formatter
67
75
  # :startdoc:
68
76
 
69
77
  end
70
-