deg-yard 0.8.7.1

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 (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,599 @@
1
+ require 'cgi'
2
+
3
+ module YARD
4
+ module Templates::Helpers
5
+ # The helper module for HTML templates.
6
+ module HtmlHelper
7
+ include MarkupHelper
8
+ include HtmlSyntaxHighlightHelper
9
+
10
+ # @group Escaping Template Data
11
+
12
+ # Escapes HTML entities
13
+ #
14
+ # @param [String] text the text to escape
15
+ # @return [String] the HTML with escaped entities
16
+ def h(text)
17
+ CGI.escapeHTML(text.to_s)
18
+ end
19
+
20
+ # Escapes a URL
21
+ #
22
+ # @param [String] text the URL
23
+ # @return [String] the escaped URL
24
+ def urlencode(text)
25
+ CGI.escape(text.to_s)
26
+ end
27
+
28
+ # @group Converting Markup to HTML
29
+
30
+ # Turns text into HTML using +markup+ style formatting.
31
+ #
32
+ # @param [String] text the text to format
33
+ # @param [Symbol] markup examples are +:markdown+, +:textile+, +:rdoc+.
34
+ # To add a custom markup type, see {MarkupHelper}
35
+ # @return [String] the HTML
36
+ def htmlify(text, markup = options.markup)
37
+ markup_meth = "html_markup_#{markup}"
38
+ return text unless respond_to?(markup_meth)
39
+ return "" unless text
40
+ return text unless markup
41
+ html = send(markup_meth, text)
42
+ if html.respond_to?(:encode)
43
+ html = html.force_encoding(text.encoding) # for libs that mess with encoding
44
+ html = html.encode(:invalid => :replace, :replace => '?')
45
+ end
46
+ html = resolve_links(html)
47
+ unless [:text, :none, :pre].include?(markup)
48
+ html = parse_codeblocks(html)
49
+ end
50
+ html
51
+ end
52
+
53
+ # Converts Markdown to HTML
54
+ # @param [String] text input Markdown text
55
+ # @return [String] output HTML
56
+ # @since 0.6.0
57
+ def html_markup_markdown(text)
58
+ # TODO: other libraries might be more complex
59
+ provider = markup_class(:markdown)
60
+ if provider.to_s == 'RDiscount'
61
+ provider.new(text, :autolink).to_html
62
+ elsif provider.to_s == 'RedcarpetCompat'
63
+ provider.new(text, :no_intraemphasis, :gh_blockcode,
64
+ :fenced_code, :autolink).to_html
65
+ else
66
+ provider.new(text).to_html
67
+ end
68
+ end
69
+
70
+ # Converts Asciidoc to HTML
71
+ # @param [String] text input Asciidoc text
72
+ # @return [String] output HTML
73
+ def html_markup_asciidoc(text)
74
+ markup_class(:asciidoc).render(text)
75
+ end
76
+
77
+ # Converts Textile to HTML
78
+ # @param [String] text the input Textile text
79
+ # @return [String] output HTML
80
+ # @since 0.6.0
81
+ def html_markup_textile(text)
82
+ doc = markup_class(:textile).new(text)
83
+ doc.hard_breaks = false if doc.respond_to?(:hard_breaks=)
84
+ doc.to_html
85
+ end
86
+
87
+ # Converts plaintext to strict Textile (hard breaks)
88
+ # @param [String] text the input textile data
89
+ # @return [String] the output HTML
90
+ # @since 0.6.0
91
+ def html_markup_textile_strict(text)
92
+ markup_class(:textile).new(text).to_html
93
+ end
94
+
95
+ # Converts RDoc formatting (SimpleMarkup) to HTML
96
+ # @param [String] text the input RDoc formatted text
97
+ # @return [String] output HTML
98
+ # @since 0.6.0
99
+ def html_markup_rdoc(text)
100
+ doc = markup_class(:rdoc).new(text)
101
+ doc.from_path = url_for(object) if doc.respond_to?(:from_path=)
102
+ doc.to_html
103
+ end
104
+
105
+ # Converts plaintext to pre-formatted HTML
106
+ # @param [String] text the input text
107
+ # @return [String] the output HTML
108
+ # @since 0.6.0
109
+ def html_markup_pre(text)
110
+ "<pre>" + h(text) + "</pre>"
111
+ end
112
+
113
+ # Converts plaintext to regular HTML
114
+ # @param [String] text the input text
115
+ # @return [String] the output HTML
116
+ # @since 0.6.0
117
+ def html_markup_text(text)
118
+ h(text).gsub(/\r?\n/, '<br/>')
119
+ end
120
+
121
+ # @return [String] the same text with no markup
122
+ # @since 0.6.6
123
+ def html_markup_none(text)
124
+ h(text)
125
+ end
126
+
127
+ # Converts HTML to HTML
128
+ # @param [String] text input html
129
+ # @return [String] output HTML
130
+ # @since 0.6.0
131
+ def html_markup_html(text)
132
+ text
133
+ end
134
+
135
+ # Highlights Ruby source. Similar to {#html_syntax_highlight}, but
136
+ # this method is meant to be called from {#htmlify} when markup is
137
+ # set to "ruby".
138
+ #
139
+ # @param [String] source the Ruby source
140
+ # @return [String] the highlighted HTML
141
+ # @since 0.7.0
142
+ def html_markup_ruby(source)
143
+ '<pre class="code ruby">' + html_syntax_highlight(source, :ruby) + '</pre>'
144
+ end
145
+
146
+ # @return [String] HTMLified text as a single line (paragraphs removed)
147
+ def htmlify_line(*args)
148
+ "<div class='inline'>" + htmlify(*args) + "</div>"
149
+ end
150
+
151
+ # @group Syntax Highlighting Source Code
152
+
153
+ # Syntax highlights +source+ in language +type+.
154
+ #
155
+ # @note To support a specific language +type+, implement the method
156
+ # +html_syntax_highlight_TYPE+ in this class.
157
+ #
158
+ # @param [String] source the source code to highlight
159
+ # @param [Symbol, String] type the language type (:ruby, :plain, etc). Use
160
+ # :plain for no syntax highlighting.
161
+ # @return [String] the highlighted source
162
+ def html_syntax_highlight(source, type = nil)
163
+ return "" unless source
164
+ return h(source) unless options.highlight
165
+
166
+ new_type, source = parse_lang_for_codeblock(source)
167
+ type ||= new_type || :ruby
168
+ meth = "html_syntax_highlight_#{type}"
169
+ respond_to?(meth) ? send(meth, source) : h(source)
170
+ end
171
+
172
+ # @return [String] unhighlighted source
173
+ def html_syntax_highlight_plain(source)
174
+ h(source)
175
+ end
176
+
177
+ # @group Linking Objects and URLs
178
+
179
+ # Resolves any text in the form of +{Name}+ to the object specified by
180
+ # Name. Also supports link titles in the form +{Name title}+.
181
+ #
182
+ # @example Linking to an instance method
183
+ # resolve_links("{MyClass#method}") # => "<a href='...'>MyClass#method</a>"
184
+ # @example Linking to a class with a title
185
+ # resolve_links("{A::B::C the C class}") # => "<a href='...'>the c class</a>"
186
+ # @param [String] text the text to resolve links in
187
+ # @return [String] HTML with linkified references
188
+ def resolve_links(text)
189
+ code_tags = 0
190
+ text.gsub(/<(\/)?(pre|code|tt)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=[\W<]|.+<\/|$)/m) do |str|
191
+ closed, tag, escape, name, title, match = $1, $2, $3, $4, $5, $&
192
+ if tag
193
+ code_tags += (closed ? -1 : 1)
194
+ next str
195
+ end
196
+ next str unless code_tags == 0
197
+
198
+ next(match[1..-1]) if escape
199
+
200
+ next(match) if name[0,1] == '|'
201
+
202
+ if name == '<a' && title =~ /href=["'](.+?)["'].*>.*<\/a>\s*(.*)\Z/
203
+ name, title = $1, $2
204
+ title = nil if title.empty?
205
+ end
206
+
207
+ name = CGI.unescapeHTML(name)
208
+
209
+ if object.is_a?(String)
210
+ object
211
+ else
212
+ link = linkify(name, title)
213
+ if (link == name || link == title) && (name+' '+link !~ /\A<a\s.*>/)
214
+ match = /(.+)?(\{#{Regexp.quote name}(?:\s.*?)?\})(.+)?/.match(text)
215
+ file = (@file ? @file.filename : object.file) || '(unknown)'
216
+ line = (@file ? 1 : (object.docstring.line_range ? object.docstring.line_range.first : 1)) + (match ? $`.count("\n") : 0)
217
+ log.warn "In file `#{file}':#{line}: Cannot resolve link to #{name} from text" + (match ? ":" : ".")
218
+ log.warn((match[1] ? '...' : '') + match[2].gsub("\n","") + (match[3] ? '...' : '')) if match
219
+ end
220
+
221
+ link
222
+ end
223
+ end
224
+ end
225
+
226
+ # (see BaseHelper#link_file)
227
+ def link_file(filename, title = nil, anchor = nil)
228
+ if CodeObjects::ExtraFileObject === filename
229
+ file = filename
230
+ else
231
+ contents = File.file?(filename) ? nil : ''
232
+ file = CodeObjects::ExtraFileObject.new(filename, contents)
233
+ end
234
+ return title || file.title unless serializer
235
+ link_url(url_for_file(file, anchor), title || file.title)
236
+ end
237
+
238
+ # (see BaseHelper#link_include_file)
239
+ def link_include_file(file)
240
+ unless file.is_a?(CodeObjects::ExtraFileObject)
241
+ file = CodeObjects::ExtraFileObject.new(file)
242
+ end
243
+ file.attributes[:markup] ||= markup_for_file('', file.filename)
244
+ htmlify(file.contents, file.attributes[:markup] || options.markup)
245
+ end
246
+
247
+ # (see BaseHelper#link_include_object)
248
+ def link_include_object(obj)
249
+ htmlify(obj.docstring)
250
+ end
251
+
252
+ # (see BaseHelper#link_object)
253
+ def link_object(obj, title = nil, anchor = nil, relative = true)
254
+ return title if obj.nil?
255
+ obj = Registry.resolve(object, obj, true, true) if obj.is_a?(String)
256
+ if title
257
+ title = title.to_s
258
+ elsif object.is_a?(CodeObjects::Base)
259
+ # Check if we're linking to a class method in the current
260
+ # object. If we are, create a title in the format of
261
+ # "CurrentClass.method_name"
262
+ if obj.is_a?(CodeObjects::MethodObject) && obj.scope == :class && obj.parent == object
263
+ title = h([object.name, obj.sep, obj.name].join)
264
+ elsif obj.title != obj.path
265
+ title = h(obj.title)
266
+ else
267
+ title = h(object.relative_path(obj))
268
+ end
269
+ else
270
+ title = h(obj.to_s)
271
+ end
272
+ return title unless serializer
273
+ return title if obj.is_a?(CodeObjects::Proxy)
274
+
275
+ link = url_for(obj, anchor, relative)
276
+ link = link ? link_url(link, title, :title => h("#{obj.title} (#{obj.type})")) : title
277
+ "<span class='object_link'>" + link + "</span>"
278
+ end
279
+
280
+ # (see BaseHelper#link_url)
281
+ def link_url(url, title = nil, params = {})
282
+ title ||= url
283
+ title.gsub!(/[\r\n]/, ' ')
284
+ params = SymbolHash.new(false).update(
285
+ :href => url,
286
+ :title => h(title)
287
+ ).update(params)
288
+ params[:target] ||= '_parent' if url =~ /^(\w+):\/\//
289
+ "<a #{tag_attrs(params)}>#{title}</a>".gsub(/[\r\n]/, ' ')
290
+ end
291
+
292
+ # @group URL Helpers
293
+
294
+ # @param [CodeObjects::Base] object the object to get an anchor for
295
+ # @return [String] the anchor for a specific object
296
+ def anchor_for(object)
297
+ case object
298
+ when CodeObjects::MethodObject
299
+ "#{object.name}-#{object.scope}_#{object.type}"
300
+ when CodeObjects::ClassVariableObject
301
+ "#{object.name.to_s.gsub('@@', '')}-#{object.type}"
302
+ when CodeObjects::Base
303
+ "#{object.name}-#{object.type}"
304
+ when CodeObjects::Proxy
305
+ object.path
306
+ else
307
+ object.to_s
308
+ end
309
+ end
310
+
311
+ # Returns the URL for an object.
312
+ #
313
+ # @param [String, CodeObjects::Base] obj the object (or object path) to link to
314
+ # @param [String] anchor the anchor to link to
315
+ # @param [Boolean] relative use a relative or absolute link
316
+ # @return [String] the URL location of the object
317
+ def url_for(obj, anchor = nil, relative = true)
318
+ link = nil
319
+ return link unless serializer
320
+ return link if obj.is_a?(CodeObjects::Base) && run_verifier([obj]).empty?
321
+
322
+ if obj.is_a?(CodeObjects::Base) && !obj.is_a?(CodeObjects::NamespaceObject)
323
+ # If the obj is not a namespace obj make it the anchor.
324
+ anchor, obj = obj, obj.namespace
325
+ end
326
+
327
+ objpath = serializer.serialized_path(obj)
328
+ return link unless objpath
329
+
330
+ if relative
331
+ fromobj = object
332
+ if object.is_a?(CodeObjects::Base) &&
333
+ !object.is_a?(CodeObjects::NamespaceObject)
334
+ fromobj = owner
335
+ end
336
+
337
+ from = serializer.serialized_path(fromobj)
338
+ link = File.relative_path(from, objpath)
339
+ else
340
+ link = objpath
341
+ end
342
+
343
+ link + (anchor ? '#' + urlencode(anchor_for(anchor)) : '')
344
+ end
345
+
346
+ # Returns the URL for a specific file
347
+ #
348
+ # @param [String, CodeObjects::ExtraFileObject] filename the filename to link to
349
+ # @param [String] anchor optional anchor
350
+ # @return [String] the URL pointing to the file
351
+ def url_for_file(filename, anchor = nil)
352
+ return '' unless serializer
353
+ fromobj = object
354
+ if CodeObjects::Base === fromobj && !fromobj.is_a?(CodeObjects::NamespaceObject)
355
+ fromobj = fromobj.namespace
356
+ end
357
+ from = serializer.serialized_path(fromobj)
358
+ if filename == options.readme
359
+ path = 'index.html'
360
+ else
361
+ path = serializer.serialized_path(filename)
362
+ end
363
+ link = File.relative_path(from, path)
364
+ link += (anchor ? '#' + urlencode(anchor) : '')
365
+ link
366
+ end
367
+
368
+ # Returns the URL for a list type
369
+ #
370
+ # @param [String, Symbol] type the list type to generate a URL for
371
+ # @return [String] the URL pointing to the list
372
+ # @since 0.8.0
373
+ def url_for_list(type)
374
+ url_for_file("#{type}_list.html")
375
+ end
376
+
377
+ # Returns the URL for the frameset page
378
+ #
379
+ # @return [String] the URL pointing to the frames page
380
+ # @since 0.8.0
381
+ def url_for_frameset
382
+ url_for_file("frames.html")
383
+ end
384
+
385
+ # Returns the URL for the main page (README or alphabetic index)
386
+ #
387
+ # @return [String] the URL pointing to the first main page the
388
+ # user should see.
389
+ def url_for_main
390
+ url_for_file("index.html")
391
+ end
392
+
393
+ # Returns the URL for the alphabetic index page
394
+ #
395
+ # @return [String] the URL pointing to the first main page the
396
+ # user should see.
397
+ def url_for_index
398
+ url_for_file("_index.html")
399
+ end
400
+
401
+ # @group Formatting Objects and Attributes
402
+
403
+ # Formats a list of objects and links them
404
+ # @return [String] a formatted list of objects
405
+ def format_object_name_list(objects)
406
+ objects.sort_by {|o| o.name.to_s.downcase }.map do |o|
407
+ "<span class='name'>" + linkify(o, o.name) + "</span>"
408
+ end.join(", ")
409
+ end
410
+
411
+ # Formats a list of types from a tag.
412
+ #
413
+ # @param [Array<String>, FalseClass] typelist
414
+ # the list of types to be formatted.
415
+ #
416
+ # @param [Boolean] brackets omits the surrounding
417
+ # brackets if +brackets+ is set to +false+.
418
+ #
419
+ # @return [String] the list of types formatted
420
+ # as [Type1, Type2, ...] with the types linked
421
+ # to their respective descriptions.
422
+ #
423
+ def format_types(typelist, brackets = true)
424
+ return unless typelist.is_a?(Array)
425
+ list = typelist.map do |type|
426
+ type = type.gsub(/([<>])/) { h($1) }
427
+ type = type.gsub(/([\w:]+)/) { $1 == "lt" || $1 == "gt" ? $1 : linkify($1, $1) }
428
+ "<tt>" + type + "</tt>"
429
+ end
430
+ list.empty? ? "" : (brackets ? "(#{list.join(", ")})" : list.join(", "))
431
+ end
432
+
433
+ # Get the return types for a method signature.
434
+ #
435
+ # @param [CodeObjects::MethodObject] meth the method object
436
+ # @param [Boolean] link whether to link the types
437
+ # @return [String] the signature types
438
+ # @since 0.5.3
439
+ def signature_types(meth, link = true)
440
+ meth = convert_method_to_overload(meth)
441
+ if meth.respond_to?(:object) && !meth.has_tag?(:return)
442
+ meth = meth.object
443
+ end
444
+
445
+ type = options.default_return || ""
446
+ if meth.tag(:return) && meth.tag(:return).types
447
+ types = meth.tags(:return).map {|t| t.types ? t.types : [] }.flatten.uniq
448
+ first = link ? h(types.first) : format_types([types.first], false)
449
+ if types.size == 2 && types.last == 'nil'
450
+ type = first + '<sup>?</sup>'
451
+ elsif types.size == 2 && types.last =~ /^(Array)?<#{Regexp.quote types.first}>$/
452
+ type = first + '<sup>+</sup>'
453
+ elsif types.size > 2
454
+ type = [first, '...'].join(', ')
455
+ elsif types == ['void'] && options.hide_void_return
456
+ type = ""
457
+ else
458
+ type = link ? h(types.join(", ")) : format_types(types, false)
459
+ end
460
+ elsif !type.empty?
461
+ type = link ? h(type) : format_types([type], false)
462
+ end
463
+ type = "(#{type}) " unless type.empty?
464
+ type
465
+ end
466
+
467
+ # Formats the signature of method +meth+.
468
+ #
469
+ # @param [CodeObjects::MethodObject] meth the method object to list
470
+ # the signature of
471
+ # @param [Boolean] link whether to link the method signature to the details view
472
+ # @param [Boolean] show_extras whether to show extra meta-data (visibility, attribute info)
473
+ # @param [Boolean] full_attr_name whether to show the full attribute name
474
+ # ("name=" instead of "name")
475
+ # @return [String] the formatted method signature
476
+ def signature(meth, link = true, show_extras = true, full_attr_name = true)
477
+ meth = convert_method_to_overload(meth)
478
+
479
+ type = signature_types(meth, link)
480
+ scope = meth.scope == :class ? "+" : "-"
481
+ name = full_attr_name ? meth.name : meth.name.to_s.gsub(/^(\w+)=$/, '\1')
482
+ blk = format_block(meth)
483
+ args = !full_attr_name && meth.writer? ? "" : format_args(meth)
484
+ extras = []
485
+ extras_text = ''
486
+ if show_extras
487
+ if rw = meth.attr_info
488
+ attname = [rw[:read] ? 'read' : nil, rw[:write] ? 'write' : nil].compact
489
+ attname = attname.size == 1 ? attname.join('') + 'only' : nil
490
+ extras << attname if attname
491
+ end
492
+ extras << meth.visibility if meth.visibility != :public
493
+ extras_text = ' <span class="extras">(' + extras.join(", ") + ')</span>' unless extras.empty?
494
+ end
495
+ title = "%s %s<strong>%s</strong>%s %s" % [scope, type, h(name), args, blk]
496
+ if link
497
+ if meth.is_a?(YARD::CodeObjects::MethodObject)
498
+ link_title = "#{h meth.name(true)} (#{meth.scope} #{meth.type})"
499
+ else
500
+ link_title = "#{h name} (#{meth.type})"
501
+ end
502
+ obj = meth.respond_to?(:object) ? meth.object : meth
503
+ url = url_for(object, obj)
504
+ link_url(url, title, :title => link_title) + extras_text
505
+ else
506
+ title + extras_text
507
+ end
508
+ end
509
+
510
+ # @group Getting the Character Encoding
511
+
512
+ # Returns the current character set. The default value can be overridden
513
+ # by setting the +LANG+ environment variable or by overriding this
514
+ # method. In Ruby 1.9 you can also modify this value by setting
515
+ # +Encoding.default_external+.
516
+ #
517
+ # @return [String] the current character set
518
+ # @since 0.5.4
519
+ def charset
520
+ has_encoding = defined?(::Encoding)
521
+ if @file && has_encoding
522
+ lang = @file.contents.encoding.to_s
523
+ else
524
+ return 'utf-8' unless has_encoding || lang = ENV['LANG']
525
+ if has_encoding
526
+ lang = ::Encoding.default_external.name.downcase
527
+ else
528
+ lang = lang.downcase.split('.').last
529
+ end
530
+ end
531
+ case lang
532
+ when "ascii-8bit", "us-ascii", "ascii-7bit"; 'iso-8859-1'
533
+ when "utf8"; 'utf-8'
534
+ else; lang
535
+ end
536
+ end
537
+
538
+ # @endgroup
539
+
540
+ private
541
+
542
+ # Converts a set of hash options into HTML attributes for a tag
543
+ #
544
+ # @param [Hash{String => String}] opts the tag options
545
+ # @return [String] the tag attributes of an HTML tag
546
+ def tag_attrs(opts = {})
547
+ opts.sort_by {|k, v| k.to_s }.map {|k,v| "#{k}=#{v.to_s.inspect}" if v }.join(" ")
548
+ end
549
+
550
+ # Converts a {CodeObjects::MethodObject} into an overload object
551
+ # @since 0.5.3
552
+ def convert_method_to_overload(meth)
553
+ # use first overload tag if it has a return type and method itself does not
554
+ if !meth.tag(:return) && meth.tags(:overload).size == 1 && meth.tag(:overload).tag(:return)
555
+ return meth.tag(:overload)
556
+ end
557
+ meth
558
+ end
559
+
560
+ # Parses !!!lang out of codeblock, returning the codeblock language
561
+ # followed by the source code.
562
+ #
563
+ # @param [String] source the source code whose language to determine
564
+ # @return [Array(String, String)] the language, if any, and the
565
+ # remaining source
566
+ # @since 0.7.5
567
+ def parse_lang_for_codeblock(source)
568
+ type = nil
569
+ if source =~ /\A(?:[ \t]*\r?\n)?[ \t]*!!!([\w.+-]+)[ \t]*\r?\n/
570
+ type, source = $1, $'
571
+ end
572
+
573
+ [type, source]
574
+ end
575
+
576
+ # Parses code blocks out of html and performs syntax highlighting
577
+ # on code inside of the blocks.
578
+ #
579
+ # @param [String] html the html to search for code in
580
+ # @return [String] highlighted html
581
+ # @see #html_syntax_highlight
582
+ def parse_codeblocks(html)
583
+ html.gsub(/<pre\s*(?:lang="(.+?)")?>(?:\s*<code\s*(?:class="(.+?)")?\s*>)?(.+?)(?:<\/code>\s*)?<\/pre>/m) do
584
+ string = $3
585
+ # handle !!!LANG prefix to send to html_syntax_highlight_LANG
586
+ language, _ = parse_lang_for_codeblock(string)
587
+ language ||= $1 || $2 || object.source_type
588
+
589
+ if options.highlight
590
+ string = html_syntax_highlight(CGI.unescapeHTML(string), language)
591
+ end
592
+ classes = ['code', language].compact.join(' ')
593
+ %Q{<pre class="#{classes}"><code class="#{language}">#{string}</code></pre>}
594
+ end
595
+ end
596
+ end
597
+ end
598
+ end
599
+
@@ -0,0 +1,59 @@
1
+ module YARD
2
+ module Templates
3
+ module Helpers
4
+ # Helper methods for syntax highlighting.
5
+ module HtmlSyntaxHighlightHelper
6
+ # Highlights Ruby source
7
+ # @param [String] source the Ruby source code
8
+ # @return [String] the highlighted Ruby source
9
+ def html_syntax_highlight_ruby(source)
10
+ if Parser::SourceParser.parser_type == :ruby
11
+ html_syntax_highlight_ruby_ripper(source)
12
+ else
13
+ html_syntax_highlight_ruby_legacy(source)
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def html_syntax_highlight_ruby_ripper(source)
20
+ tokenlist = Parser::Ruby::RubyParser.parse(source, "(syntax_highlight)").tokens
21
+ output = ""
22
+ tokenlist.each do |s|
23
+ output << "<span class='tstring'>" if [:tstring_beg, :regexp_beg].include?(s[0])
24
+ case s.first
25
+ when :nl, :ignored_nl, :sp
26
+ output << h(s[1])
27
+ when :ident
28
+ output << "<span class='id identifier rubyid_#{h(s[1])}'>#{h(s[1])}</span>"
29
+ else
30
+ output << "<span class='#{s.first}'>#{h(s[1])}</span>"
31
+ end
32
+ output << "</span>" if [:tstring_end, :regexp_end].include?(s[0])
33
+ end
34
+ output
35
+ rescue Parser::ParserSyntaxError
36
+ h(source)
37
+ end
38
+
39
+ def html_syntax_highlight_ruby_legacy(source)
40
+ tokenlist = Parser::Ruby::Legacy::TokenList.new(source)
41
+ tokenlist.map do |s|
42
+ prettyclass = s.class.class_name.sub(/^Tk/, '').downcase
43
+ prettysuper = s.class.superclass.class_name.sub(/^Tk/, '').downcase
44
+
45
+ case s
46
+ when Parser::Ruby::Legacy::RubyToken::TkWhitespace, Parser::Ruby::Legacy::RubyToken::TkUnknownChar
47
+ h s.text
48
+ when Parser::Ruby::Legacy::RubyToken::TkId
49
+ prettyval = h(s.text)
50
+ "<span class='rubyid_#{prettyval} #{prettyclass} #{prettysuper}'>#{prettyval}</span>"
51
+ else
52
+ "<span class='#{prettyclass} #{prettysuper}'>#{h s.text}</span>"
53
+ end
54
+ end.join
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,22 @@
1
+ module YARD
2
+ module Templates
3
+ module Helpers
4
+ module Markup
5
+ begin require 'rdoc'; rescue LoadError; end
6
+ begin
7
+ require 'rdoc/markdown'
8
+ rescue LoadError
9
+ raise NameError, "could not load RDoc Markdown support (rdoc is too old)"
10
+ end
11
+
12
+ class RDocMarkdown < RDocMarkup
13
+ def initialize(text)
14
+ super RDoc::Markdown.new.parse(text)
15
+ end
16
+
17
+ def fix_typewriter(html) html end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end