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
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+ require 'cgi'
3
+
4
+ ##
5
+ # Creates HTML-safe labels suitable for use in id attributes. Tidylinks are
6
+ # converted to their link part and cross-reference links have the suppression
7
+ # marks removed (\\SomeClass is converted to SomeClass).
8
+
9
+ class RDoc::Markup::ToLabel < RDoc::Markup::Formatter
10
+
11
+ attr_reader :res # :nodoc:
12
+
13
+ ##
14
+ # Creates a new formatter that will output HTML-safe labels
15
+
16
+ def initialize markup = nil
17
+ super nil, markup
18
+
19
+ @markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
20
+ @markup.add_regexp_handling(/(((\{.*?\})|\b\S+?)\[\S+?\])/, :TIDYLINK)
21
+
22
+ add_tag :BOLD, '', ''
23
+ add_tag :TT, '', ''
24
+ add_tag :EM, '', ''
25
+
26
+ @res = []
27
+ end
28
+
29
+ ##
30
+ # Converts +text+ to an HTML-safe label
31
+
32
+ def convert text
33
+ label = convert_flow @am.flow text
34
+
35
+ CGI.escape(label).gsub('%', '-').sub(/^-/, '')
36
+ end
37
+
38
+ ##
39
+ # Converts the CROSSREF +target+ to plain text, removing the suppression
40
+ # marker, if any
41
+
42
+ def handle_regexp_CROSSREF target
43
+ text = target.text
44
+
45
+ text.sub(/^\\/, '')
46
+ end
47
+
48
+ ##
49
+ # Converts the TIDYLINK +target+ to just the text part
50
+
51
+ def handle_regexp_TIDYLINK target
52
+ text = target.text
53
+
54
+ return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
55
+
56
+ $1
57
+ end
58
+
59
+ alias accept_blank_line ignore
60
+ alias accept_block_quote ignore
61
+ alias accept_heading ignore
62
+ alias accept_list_end ignore
63
+ alias accept_list_item_end ignore
64
+ alias accept_list_item_start ignore
65
+ alias accept_list_start ignore
66
+ alias accept_paragraph ignore
67
+ alias accept_raw ignore
68
+ alias accept_rule ignore
69
+ alias accept_verbatim ignore
70
+ alias end_accepting ignore
71
+ alias handle_regexp_HARD_BREAK ignore
72
+ alias start_accepting ignore
73
+
74
+ end
75
+
@@ -0,0 +1,192 @@
1
+ # frozen_string_literal: true
2
+ # :markup: markdown
3
+
4
+ ##
5
+ # Outputs parsed markup as Markdown
6
+
7
+ class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc
8
+
9
+ ##
10
+ # Creates a new formatter that will output Markdown format text
11
+
12
+ def initialize markup = nil
13
+ super
14
+
15
+ @headings[1] = ['# ', '']
16
+ @headings[2] = ['## ', '']
17
+ @headings[3] = ['### ', '']
18
+ @headings[4] = ['#### ', '']
19
+ @headings[5] = ['##### ', '']
20
+ @headings[6] = ['###### ', '']
21
+
22
+ add_regexp_handling_RDOCLINK
23
+ add_regexp_handling_TIDYLINK
24
+
25
+ @hard_break = " \n"
26
+ end
27
+
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
+ ##
45
+ # Finishes consumption of `list`
46
+
47
+ def accept_list_end list
48
+ @res << "\n"
49
+
50
+ super
51
+ end
52
+
53
+ ##
54
+ # Finishes consumption of `list_item`
55
+
56
+ def accept_list_item_end list_item
57
+ width = case @list_type.last
58
+ when :BULLET then
59
+ 4
60
+ when :NOTE, :LABEL then
61
+ use_prefix
62
+
63
+ 4
64
+ else
65
+ @list_index[-1] = @list_index.last.succ
66
+ 4
67
+ end
68
+
69
+ @indent -= width
70
+ end
71
+
72
+ ##
73
+ # Prepares the visitor for consuming `list_item`
74
+
75
+ def accept_list_item_start list_item
76
+ type = @list_type.last
77
+
78
+ case type
79
+ when :NOTE, :LABEL then
80
+ bullets = Array(list_item.label).map do |label|
81
+ attributes(label).strip
82
+ end.join "\n"
83
+
84
+ bullets << "\n:"
85
+
86
+ @prefix = ' ' * @indent
87
+ @indent += 4
88
+ @prefix << bullets + (' ' * (@indent - 1))
89
+ else
90
+ bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
91
+ @prefix = (' ' * @indent) + bullet.ljust(4)
92
+
93
+ @indent += 4
94
+ end
95
+ end
96
+
97
+ ##
98
+ # Prepares the visitor for consuming `list`
99
+
100
+ def accept_list_start list
101
+ case list.type
102
+ when :BULLET, :LABEL, :NOTE then
103
+ @list_index << nil
104
+ when :LALPHA, :NUMBER, :UALPHA then
105
+ @list_index << 1
106
+ else
107
+ raise RDoc::Error, "invalid list type #{list.type}"
108
+ end
109
+
110
+ @list_width << 4
111
+ @list_type << list.type
112
+ end
113
+
114
+ ##
115
+ # Adds `rule` to the output
116
+
117
+ def accept_rule rule
118
+ use_prefix or @res << ' ' * @indent
119
+ @res << '-' * 3
120
+ @res << "\n"
121
+ end
122
+
123
+ ##
124
+ # Outputs `verbatim` indented 4 columns
125
+
126
+ def accept_verbatim verbatim
127
+ indent = ' ' * (@indent + 4)
128
+
129
+ verbatim.parts.each do |part|
130
+ @res << indent unless part == "\n"
131
+ @res << part
132
+ end
133
+
134
+ @res << "\n"
135
+ end
136
+
137
+ ##
138
+ # Creates a Markdown-style URL from +url+ with +text+.
139
+
140
+ def gen_url url, text
141
+ scheme, url, = parse_url url
142
+
143
+ "[#{text.sub(%r{^#{scheme}:/*}i, '')}](#{url})"
144
+ end
145
+
146
+ ##
147
+ # Handles <tt>rdoc-</tt> type links for footnotes.
148
+
149
+ def handle_rdoc_link url
150
+ case url
151
+ when /^rdoc-ref:/ then
152
+ $'
153
+ when /^rdoc-label:footmark-(\d+)/ then
154
+ "[^#{$1}]:"
155
+ when /^rdoc-label:foottext-(\d+)/ then
156
+ "[^#{$1}]"
157
+ when /^rdoc-label:label-/ then
158
+ gen_url url, $'
159
+ when /^rdoc-image:/ then
160
+ "![](#{$'})"
161
+ when /^rdoc-[a-z]+:/ then
162
+ $'
163
+ end
164
+ end
165
+
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
+ ##
185
+ # Converts the rdoc-...: links into a Markdown.style links.
186
+
187
+ def handle_regexp_RDOCLINK target
188
+ handle_rdoc_link target.text
189
+ end
190
+
191
+ end
192
+
@@ -1,6 +1,4 @@
1
- require 'rdoc/markup/formatter'
2
- require 'rdoc/markup/inline'
3
-
1
+ # frozen_string_literal: true
4
2
  ##
5
3
  # Outputs RDoc markup as RDoc markup! (mostly)
6
4
 
@@ -44,10 +42,10 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
44
42
  ##
45
43
  # Creates a new formatter that will output (mostly) \RDoc markup
46
44
 
47
- def initialize
48
- super
45
+ def initialize markup = nil
46
+ super nil, markup
49
47
 
50
- @markup.add_special(/\\\S/, :SUPPRESSED_CROSSREF)
48
+ @markup.add_regexp_handling(/\\\S/, :SUPPRESSED_CROSSREF)
51
49
  @width = 78
52
50
  init_tags
53
51
 
@@ -60,6 +58,8 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
60
58
  @headings[4] = ['==== ', '']
61
59
  @headings[5] = ['===== ', '']
62
60
  @headings[6] = ['====== ', '']
61
+
62
+ @hard_break = "\n"
63
63
  end
64
64
 
65
65
  ##
@@ -78,6 +78,21 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
78
78
  @res << "\n"
79
79
  end
80
80
 
81
+ ##
82
+ # Adds +paragraph+ to the output
83
+
84
+ def accept_block_quote block_quote
85
+ @indent += 2
86
+
87
+ block_quote.parts.each do |part|
88
+ @prefix = '> '
89
+
90
+ part.accept self
91
+ end
92
+
93
+ @indent -= 2
94
+ end
95
+
81
96
  ##
82
97
  # Adds +heading+ to the output
83
98
 
@@ -106,6 +121,11 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
106
121
  when :BULLET then
107
122
  2
108
123
  when :NOTE, :LABEL then
124
+ if @prefix then
125
+ @res << @prefix.strip
126
+ @prefix = nil
127
+ end
128
+
109
129
  @res << "\n"
110
130
  2
111
131
  else
@@ -125,10 +145,15 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
125
145
 
126
146
  case type
127
147
  when :NOTE, :LABEL then
128
- bullet = attributes(list_item.label) + ":\n"
148
+ bullets = Array(list_item.label).map do |label|
149
+ attributes(label).strip
150
+ end.join "\n"
151
+
152
+ bullets << ":\n" unless bullets.empty?
153
+
129
154
  @prefix = ' ' * @indent
130
155
  @indent += 2
131
- @prefix << bullet + (' ' * @indent)
156
+ @prefix << bullets + (' ' * @indent)
132
157
  else
133
158
  bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
134
159
  @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
@@ -168,7 +193,18 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
168
193
  # Adds +paragraph+ to the output
169
194
 
170
195
  def accept_paragraph paragraph
171
- wrap attributes(paragraph.text)
196
+ text = paragraph.text @hard_break
197
+ wrap attributes text
198
+ end
199
+
200
+ ##
201
+ # Adds +paragraph+ to the output
202
+
203
+ def accept_indented_paragraph paragraph
204
+ @indent += paragraph.indent
205
+ text = paragraph.text @hard_break
206
+ wrap attributes text
207
+ @indent -= paragraph.indent
172
208
  end
173
209
 
174
210
  ##
@@ -198,7 +234,35 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
198
234
  @res << part
199
235
  end
200
236
 
201
- @res << "\n" unless @res =~ /\n\z/
237
+ @res << "\n"
238
+ end
239
+
240
+ ##
241
+ # Adds +table+ to the output
242
+
243
+ def accept_table header, body, aligns
244
+ widths = header.zip(body) do |h, b|
245
+ [h.size, b.size].max
246
+ end
247
+ aligns = aligns.map do |a|
248
+ case a
249
+ when nil
250
+ :center
251
+ when :left
252
+ :ljust
253
+ when :right
254
+ :rjust
255
+ end
256
+ end
257
+ @res << header.zip(widths, aligns) do |h, w, a|
258
+ h.__send__(a, w)
259
+ end.join("|").rstrip << "\n"
260
+ @res << widths.map {|w| "-" * w }.join("|") << "\n"
261
+ body.each do |row|
262
+ @res << row.zip(widths, aligns) do |t, w, a|
263
+ t.__send__(a, w)
264
+ end.join("|").rstrip << "\n"
265
+ end
202
266
  end
203
267
 
204
268
  ##
@@ -217,14 +281,21 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
217
281
  end
218
282
 
219
283
  ##
220
- # Removes preceeding \\ from the suppressed crossref +special+
284
+ # Removes preceding \\ from the suppressed crossref +target+
221
285
 
222
- def handle_special_SUPPRESSED_CROSSREF special
223
- text = special.text
286
+ def handle_regexp_SUPPRESSED_CROSSREF target
287
+ text = target.text
224
288
  text = text.sub('\\', '') unless in_tt?
225
289
  text
226
290
  end
227
291
 
292
+ ##
293
+ # Adds a newline to the output
294
+
295
+ def handle_regexp_HARD_BREAK target
296
+ "\n"
297
+ end
298
+
228
299
  ##
229
300
  # Prepares the visitor for text generation
230
301
 
@@ -243,8 +314,7 @@ class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter
243
314
  # prefix for later consumption.
244
315
 
245
316
  def use_prefix
246
- prefix = @prefix
247
- @prefix = nil
317
+ prefix, @prefix = @prefix, nil
248
318
  @res << prefix if prefix
249
319
 
250
320
  prefix
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+ ##
3
+ # Extracts just the RDoc::Markup::Heading elements from a
4
+ # RDoc::Markup::Document to help build a table of contents
5
+
6
+ class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
7
+
8
+ @to_toc = nil
9
+
10
+ ##
11
+ # Singleton for table-of-contents generation
12
+
13
+ def self.to_toc
14
+ @to_toc ||= new
15
+ end
16
+
17
+ ##
18
+ # Output accumulator
19
+
20
+ attr_reader :res
21
+
22
+ ##
23
+ # Omits headings with a level less than the given level.
24
+
25
+ attr_accessor :omit_headings_below
26
+
27
+ def initialize # :nodoc:
28
+ super nil
29
+
30
+ @omit_headings_below = nil
31
+ end
32
+
33
+ ##
34
+ # Adds +document+ to the output, using its heading cutoff if present
35
+
36
+ def accept_document document
37
+ @omit_headings_below = document.omit_headings_below
38
+
39
+ super
40
+ end
41
+
42
+ ##
43
+ # Adds +heading+ to the table of contents
44
+
45
+ def accept_heading heading
46
+ @res << heading unless suppressed? heading
47
+ end
48
+
49
+ ##
50
+ # Returns the table of contents
51
+
52
+ def end_accepting
53
+ @res
54
+ end
55
+
56
+ ##
57
+ # Prepares the visitor for text generation
58
+
59
+ def start_accepting
60
+ @omit_headings_below = nil
61
+ @res = []
62
+ end
63
+
64
+ ##
65
+ # Returns true if +heading+ is below the display threshold
66
+
67
+ def suppressed? heading
68
+ return false unless @omit_headings_below
69
+
70
+ heading.level > @omit_headings_below
71
+ end
72
+
73
+ # :stopdoc:
74
+ alias accept_block_quote ignore
75
+ alias accept_raw ignore
76
+ alias accept_rule ignore
77
+ alias accept_blank_line ignore
78
+ alias accept_paragraph ignore
79
+ alias accept_verbatim ignore
80
+ alias accept_list_end ignore
81
+ alias accept_list_item_start ignore
82
+ alias accept_list_item_end ignore
83
+ alias accept_list_end_bullet ignore
84
+ alias accept_list_start ignore
85
+ alias accept_table ignore
86
+ # :startdoc:
87
+
88
+ end
89
+
@@ -1,6 +1,4 @@
1
- require 'rdoc/markup'
2
- require 'rdoc/markup/formatter'
3
-
1
+ # frozen_string_literal: true
4
2
  ##
5
3
  # This Markup outputter is used for testing purposes.
6
4
 
@@ -21,7 +19,7 @@ class RDoc::Markup::ToTest < RDoc::Markup::Formatter
21
19
  end
22
20
 
23
21
  def accept_paragraph(paragraph)
24
- @res << paragraph.text
22
+ @res << convert_flow(@am.flow(paragraph.text))
25
23
  end
26
24
 
27
25
  def accept_raw raw
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+ ##
3
+ # Extracts sections of text enclosed in plus, tt or code. Used to discover
4
+ # undocumented parameters.
5
+
6
+ class RDoc::Markup::ToTtOnly < RDoc::Markup::Formatter
7
+
8
+ ##
9
+ # Stack of list types
10
+
11
+ attr_reader :list_type
12
+
13
+ ##
14
+ # Output accumulator
15
+
16
+ attr_reader :res
17
+
18
+ ##
19
+ # Creates a new tt-only formatter.
20
+
21
+ def initialize markup = nil
22
+ super nil, markup
23
+
24
+ add_tag :TT, nil, nil
25
+ end
26
+
27
+ ##
28
+ # Adds tts from +block_quote+ to the output
29
+
30
+ def accept_block_quote block_quote
31
+ tt_sections block_quote.text
32
+ end
33
+
34
+ ##
35
+ # Pops the list type for +list+ from #list_type
36
+
37
+ def accept_list_end list
38
+ @list_type.pop
39
+ end
40
+
41
+ ##
42
+ # Pushes the list type for +list+ onto #list_type
43
+
44
+ def accept_list_start list
45
+ @list_type << list.type
46
+ end
47
+
48
+ ##
49
+ # Prepares the visitor for consuming +list_item+
50
+
51
+ def accept_list_item_start list_item
52
+ case @list_type.last
53
+ when :NOTE, :LABEL then
54
+ Array(list_item.label).map do |label|
55
+ tt_sections label
56
+ end.flatten
57
+ end
58
+ end
59
+
60
+ ##
61
+ # Adds +paragraph+ to the output
62
+
63
+ def accept_paragraph paragraph
64
+ tt_sections(paragraph.text)
65
+ end
66
+
67
+ ##
68
+ # Does nothing to +markup_item+ because it doesn't have any user-built
69
+ # content
70
+
71
+ def do_nothing markup_item
72
+ end
73
+
74
+ alias accept_blank_line do_nothing # :nodoc:
75
+ alias accept_heading do_nothing # :nodoc:
76
+ alias accept_list_item_end do_nothing # :nodoc:
77
+ alias accept_raw do_nothing # :nodoc:
78
+ alias accept_rule do_nothing # :nodoc:
79
+ alias accept_verbatim do_nothing # :nodoc:
80
+
81
+ ##
82
+ # Extracts tt sections from +text+
83
+
84
+ def tt_sections text
85
+ flow = @am.flow text.dup
86
+
87
+ flow.each do |item|
88
+ case item
89
+ when String then
90
+ @res << item if in_tt?
91
+ when RDoc::Markup::AttrChanger then
92
+ off_tags res, item
93
+ on_tags res, item
94
+ when RDoc::Markup::RegexpHandling then
95
+ @res << convert_regexp_handling(item) if in_tt? # TODO can this happen?
96
+ else
97
+ raise "Unknown flow element: #{item.inspect}"
98
+ end
99
+ end
100
+
101
+ res
102
+ end
103
+
104
+ ##
105
+ # Returns an Array of items that were wrapped in plus, tt or code.
106
+
107
+ def end_accepting
108
+ @res.compact
109
+ end
110
+
111
+ ##
112
+ # Prepares the visitor for gathering tt sections
113
+
114
+ def start_accepting
115
+ @res = []
116
+
117
+ @list_type = []
118
+ end
119
+
120
+ end
121
+
@@ -1,8 +1,24 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # A section of verbatim text
3
4
 
4
5
  class RDoc::Markup::Verbatim < RDoc::Markup::Raw
5
6
 
7
+ ##
8
+ # Format of this verbatim section
9
+
10
+ attr_accessor :format
11
+
12
+ def initialize *parts # :nodoc:
13
+ super
14
+
15
+ @format = nil
16
+ end
17
+
18
+ def == other # :nodoc:
19
+ super and @format == other.format
20
+ end
21
+
6
22
  ##
7
23
  # Calls #accept_verbatim on +visitor+
8
24
 
@@ -34,6 +50,29 @@ class RDoc::Markup::Verbatim < RDoc::Markup::Raw
34
50
  @parts = parts
35
51
  end
36
52
 
53
+ def pretty_print q # :nodoc:
54
+ self.class.name =~ /.*::(\w{1,4})/i
55
+
56
+ q.group 2, "[#{$1.downcase}: ", ']' do
57
+ if @format then
58
+ q.text "format: #{@format}"
59
+ q.breakable
60
+ end
61
+
62
+ q.seplist @parts do |part|
63
+ q.pp part
64
+ end
65
+ end
66
+ end
67
+
68
+ ##
69
+ # Is this verbatim section Ruby code?
70
+
71
+ def ruby?
72
+ @format ||= nil # TODO for older ri data, switch the tree to marshal_dump
73
+ @format == :ruby
74
+ end
75
+
37
76
  ##
38
77
  # The text of the section
39
78