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,74 @@
1
+ module YARD
2
+ module I18n
3
+ # +Locale+ is a unit of translation. It has {#name} and a set of
4
+ # messages.
5
+ #
6
+ # @since 0.8.2
7
+ class Locale
8
+ class << self
9
+ # @return [String, nil] the default locale name.
10
+ # @since 0.8.4
11
+ attr_accessor :default
12
+
13
+ undef default
14
+ def default
15
+ @@default ||= nil
16
+ end
17
+
18
+ undef default=
19
+ def default=(locale)
20
+ @@default = locale
21
+ end
22
+ end
23
+
24
+ # @return [String] the name of the locale. It used IETF language
25
+ # tag format +[language[_territory][.codeset][@modifier]]+.
26
+ # @see http://tools.ietf.org/rfc/bcp/bcp47.txt
27
+ # BCP 47 - Tags for Identifying Languages
28
+ attr_reader :name
29
+
30
+ # Creates a locale for +name+ locale.
31
+ #
32
+ # @param [String] name the locale name.
33
+ def initialize(name)
34
+ @name = name
35
+ @messages = {}
36
+ end
37
+
38
+ # Loads translation messages from +locale_directory+/{#name}.po.
39
+ #
40
+ # @param [String] locale_directory the directory path that has
41
+ # {#name}.po.
42
+ # @return [Boolean] +true+ if PO file exists, +false+ otherwise.
43
+ def load(locale_directory)
44
+ return false if @name.nil?
45
+
46
+ po_file = File.join(locale_directory, "#{@name}.po")
47
+ return false unless File.exist?(po_file)
48
+
49
+ begin
50
+ require "gettext/tools/poparser"
51
+ require "gettext/runtime/mofile"
52
+ rescue LoadError
53
+ log.warn "Need gettext gem for i18n feature:"
54
+ log.warn " gem install gettext"
55
+ return false
56
+ end
57
+
58
+ parser = GetText::PoParser.new
59
+ parser.report_warning = false
60
+ data = GetText::MoFile.new
61
+ parser.parse_file(po_file, data)
62
+ @messages.merge!(data)
63
+ true
64
+ end
65
+
66
+ # @param [String] message the translation target message.
67
+ # @return [String] translated message. If tarnslation isn't
68
+ # registered, the +message+ is returned.
69
+ def translate(message)
70
+ @messages[message] || message
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,56 @@
1
+ require "set"
2
+
3
+ module YARD
4
+ module I18n
5
+ # +Message+ is a translation target message. It has message ID as
6
+ # {#id} and some properties {#locations} and {#comments}.
7
+ #
8
+ # @since 0.8.1
9
+ class Message
10
+ # @return [String] the message ID of the trnslation target message.
11
+ attr_reader :id
12
+
13
+ # @return [Set] the set of locations. Location is an array of
14
+ # path and line number where the message is appeared.
15
+ attr_reader :locations
16
+
17
+ # @return [Set] the set of comments for the messages.
18
+ attr_reader :comments
19
+
20
+ # Creates a trasnlate target message for message ID +id+.
21
+ #
22
+ # @param [String] id the message ID of the translate target message.
23
+ def initialize(id)
24
+ @id = id
25
+ @locations = Set.new
26
+ @comments = Set.new
27
+ end
28
+
29
+ # Adds location information for the message.
30
+ #
31
+ # @param [String] path the path where the message appears.
32
+ # @param [Integer] line the line number where the message appears.
33
+ # @return [void]
34
+ def add_location(path, line)
35
+ @locations << [path, line]
36
+ end
37
+
38
+ # Adds a comment for the message.
39
+ #
40
+ # @param [String] comment the comment for the message to be added.
41
+ # @return [void]
42
+ def add_comment(comment)
43
+ @comments << comment unless comment.nil?
44
+ end
45
+
46
+ # @param [Message] other the +Message+ to be compared.
47
+ # @return [Boolean] checks whether this message is equal to another.
48
+ def ==(other)
49
+ other.is_a?(self.class) and
50
+ @id == other.id and
51
+ @locations == other.locations and
52
+ @comments == other.comments
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,55 @@
1
+ module YARD
2
+ module I18n
3
+ # Acts as a container for {Message} objects.
4
+ #
5
+ # @since 0.8.1
6
+ class Messages
7
+ include Enumerable
8
+
9
+ # Creates a new container.
10
+ def initialize
11
+ @messages = {}
12
+ end
13
+
14
+ # Enumerates each {Message} in the container.
15
+ #
16
+ # @yieldparam [Message] message the next message object in
17
+ # the enumeration.
18
+ # @return [void]
19
+ def each(&block)
20
+ @messages.each_value(&block)
21
+ end
22
+
23
+ # @param [String] id the message ID to perform a lookup on.
24
+ # @return [Message, nil] a registered message for the given +id+,
25
+ # or nil if no message for the ID is found.
26
+ def [](id)
27
+ @messages[id]
28
+ end
29
+
30
+ # Registers a {Message}, the mssage ID of which is +id+. If
31
+ # corresponding +Message+ is already registered, the previously
32
+ # registered object is returned.
33
+ #
34
+ # @param [String] id the ID of the message to be registered.
35
+ # @return [Message] the registered +Message+.
36
+ def register(id)
37
+ @messages[id] ||= Message.new(id)
38
+ end
39
+
40
+ # Checks if this messages list is equal to another messages list.
41
+ #
42
+ # @param [Messages] other the container to compare.
43
+ # @return [Boolean] whether +self+ and +other+ is equivalence or not.
44
+ def ==(other)
45
+ other.is_a?(self.class) and
46
+ @messages == other.messages
47
+ end
48
+
49
+ protected
50
+
51
+ # @return [Hash{String=>Message}] the set of message objects
52
+ attr_reader :messages
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,280 @@
1
+ require "stringio"
2
+
3
+ module YARD
4
+ module I18n
5
+ # The +PotGenerator+ generates POT format string from
6
+ # {CodeObjects::Base} and {CodeObjects::ExtraFileObject}.
7
+ #
8
+ # == POT and PO
9
+ #
10
+ # POT is an acronym for "Portable Object Template". POT is a
11
+ # template file to create PO file. The extension for POT is
12
+ # ".pot". PO file is an acronym for "Portable Object". PO file has
13
+ # many parts of message ID (msgid) that is translation target
14
+ # message and message string (msgstr) that is translated message
15
+ # of message ID. If you want to tranlsate "Hello" in English into
16
+ # "Bonjour" in French, "Hello" is the msgid ID and "Bonjour" is
17
+ # msgstr. The extension for PO is ".po".
18
+ #
19
+ # == How to extract msgids
20
+ #
21
+ # The +PotGenerator+ has two parse methods:
22
+ #
23
+ # * {#parse_objects} for {CodeObjects::Base}
24
+ # * {#parse_files} for {CodeObjects::ExtraFileObject}
25
+ #
26
+ # {#parse_objects} extracts msgids from docstring and tags of
27
+ # {CodeObjects::Base} objects. The docstring of
28
+ # {CodeObjects::Base} object is parsed and a paragraph is
29
+ # extracted as a msgid. Tag name and tag text are extracted as
30
+ # msgids from a tag.
31
+ #
32
+ # {#parse_files} extracts msgids from
33
+ # {CodeObjects::ExtraFileObject} objects. The file content of
34
+ # {CodeObjects::ExtraFileObject} object is parsed and a paragraph
35
+ # is extracted as a msgid.
36
+ #
37
+ # == Usage
38
+ #
39
+ # To create a .pot file by +PotGenerator+, instantiate a
40
+ # +PotGenerator+ with a relative working directory path from a
41
+ # directory path that has created .pot file, parse
42
+ # {CodeObjects::Base} objects and {CodeObjects::ExtraFileObject}
43
+ # objects, generate a POT and write the generated POT to a .pot
44
+ # file. The relative working directory path is ".." when the
45
+ # working directory path is "." and the POT is wrote into
46
+ # "po/yard.pot".
47
+ #
48
+ # @example Generate a .pot file
49
+ # po_file_path = "po/yard.pot"
50
+ # po_file_directory_pathname = Pathname.new(po_file_path).directory)
51
+ # working_directory_pathname = Pathname.new(".")
52
+ # relative_base_path = working_directory_pathname.relative_path_from(po_file_directory_pathname).to_s
53
+ # # relative_base_path -> ".."
54
+ # generator = YARD::I18n::PotGenerator.new(relative_base_path)
55
+ # generator.parse_objects(objects)
56
+ # generator.parse_files(files)
57
+ # pot = generator.generate
58
+ # po_file_directory_pathname.mkpath
59
+ # File.open(po_file_path, "w") do |pot_file|
60
+ # pot_file.print(pot)
61
+ # end
62
+ # @see http://www.gnu.org/software/gettext/manual/html_node/PO-Files.html
63
+ # GNU gettext manual about details of PO file
64
+ class PotGenerator
65
+ # Extracted messages.
66
+ #
67
+ # @return [Messages]
68
+ # @since 0.8.1
69
+ attr_reader :messages
70
+
71
+ # Creates a POT generator that uses +relative_base_path+ to
72
+ # generate locations for a msgid. +relative_base_path+ is
73
+ # prepended to all locations.
74
+ #
75
+ # @param [String] relative_base_path a relative working
76
+ # directory path from a directory path that has created .pot
77
+ # file.
78
+ def initialize(relative_base_path)
79
+ @relative_base_path = relative_base_path
80
+ @extracted_objects = {}
81
+ @messages = Messages.new
82
+ end
83
+
84
+ # Parses {CodeObjects::Base} objects and stores extracted msgids
85
+ # into {#messages}
86
+ #
87
+ # @param [Array<CodeObjects::Base>] objects a list of
88
+ # {CodeObjects::Base} to be parsed.
89
+ # @return [void]
90
+ def parse_objects(objects)
91
+ objects.each do |object|
92
+ extract_documents(object)
93
+ end
94
+ end
95
+
96
+ # Parses {CodeObjects::ExtraFileObject} objects and stores
97
+ # extracted msgids into {#messages}.
98
+ #
99
+ # @param [Array<CodeObjects::ExtraFileObject>] files a list
100
+ # of {CodeObjects::ExtraFileObject} objects to be parsed.
101
+ # @return [void]
102
+ def parse_files(files)
103
+ files.each do |file|
104
+ extract_paragraphs(file)
105
+ end
106
+ end
107
+
108
+ # Generates POT from +@messages+.
109
+ #
110
+ # One PO file entry is generated from a +Message+ in
111
+ # +@messages+.
112
+ #
113
+ # Locations of the +Message+ are used to generate the reference
114
+ # line that is started with "#: ". +relative_base_path+ passed
115
+ # when the generater is created is prepended to each path in location.
116
+ #
117
+ # Comments of the +Message+ are used to generate the
118
+ # translater-comment line that is started with "# ".
119
+ #
120
+ # @return [String] POT format string
121
+ def generate
122
+ pot = header
123
+ sorted_messages = @messages.sort_by do |message|
124
+ sorted_locations = message.locations.sort_by do |location|
125
+ location
126
+ end
127
+ sorted_locations.first || []
128
+ end
129
+ sorted_messages.each do |message|
130
+ generate_message(pot, message)
131
+ end
132
+ pot
133
+ end
134
+
135
+ private
136
+ def header
137
+ <<-'EOH'
138
+ # SOME DESCRIPTIVE TITLE.
139
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
140
+ # This file is distributed under the same license as the PACKAGE package.
141
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
142
+ #
143
+ #, fuzzy
144
+ msgid ""
145
+ msgstr ""
146
+ "Project-Id-Version: PACKAGE VERSION\n"
147
+ "Report-Msgid-Bugs-To: \n"
148
+ "POT-Creation-Date: 2011-11-20 22:17+0900\n"
149
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
150
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
151
+ "Language-Team: LANGUAGE <LL@li.org>\n"
152
+ "Language: \n"
153
+ "MIME-Version: 1.0\n"
154
+ "Content-Type: text/plain; charset=UTF-8\n"
155
+ "Content-Transfer-Encoding: 8bit\n"
156
+
157
+ EOH
158
+ end
159
+
160
+ def generate_message(pot, message)
161
+ message.comments.sort.each do |comment|
162
+ pot << "# #{comment}\n" unless comment.empty?
163
+ end
164
+ message.locations.sort.each do |path, line|
165
+ pot << "#: #{@relative_base_path}/#{path}:#{line}\n"
166
+ end
167
+ escaped_message_id = escape_message_id(message.id)
168
+ escaped_message_id = escaped_message_id.gsub(/\n/, "\\\\n\"\n\"")
169
+ pot << "msgid \"#{escaped_message_id}\"\n"
170
+ pot << "msgstr \"\"\n"
171
+ pot << "\n"
172
+ pot
173
+ end
174
+
175
+ def escape_message_id(message_id)
176
+ message_id.gsub(/(\\|")/) do
177
+ special_character = $1
178
+ "\\#{special_character}"
179
+ end
180
+ end
181
+
182
+ def register_message(id)
183
+ @messages.register(id)
184
+ end
185
+
186
+ def extract_documents(object)
187
+ return if @extracted_objects.has_key?(object)
188
+
189
+ @extracted_objects[object] = true
190
+ case object
191
+ when CodeObjects::NamespaceObject
192
+ object.children.each do |child|
193
+ extract_documents(child)
194
+ end
195
+ end
196
+
197
+ if object.group
198
+ message = register_message(object.group)
199
+ object.files.each do |path, line|
200
+ message.add_location(path, line)
201
+ end
202
+ message.add_comment(object.path) unless object.path.empty?
203
+ end
204
+
205
+ docstring = object.docstring
206
+ unless docstring.empty?
207
+ text = Text.new(StringIO.new(docstring))
208
+ text.extract_messages do |type, *args|
209
+ case type
210
+ when :paragraph
211
+ paragraph, line_no = *args
212
+ message = register_message(paragraph.rstrip)
213
+ object.files.each do |path, line|
214
+ message.add_location(path, (docstring.line || line) + line_no)
215
+ end
216
+ message.add_comment(object.path) unless object.path.empty?
217
+ else
218
+ raise "should not reach here: unexpected type: #{type}"
219
+ end
220
+ end
221
+ end
222
+ docstring.tags.each do |tag|
223
+ extract_tag_documents(tag)
224
+ end
225
+ end
226
+
227
+ def extract_tag_documents(tag)
228
+ extract_tag_name(tag)
229
+ extract_tag_text(tag)
230
+ end
231
+
232
+ def extract_tag_name(tag)
233
+ return if tag.name.nil?
234
+ return if tag.name.is_a?(String) and tag.name.empty?
235
+ key = "tag|#{tag.tag_name}|#{tag.name}"
236
+ message = register_message(key)
237
+ tag.object.files.each do |path, line|
238
+ message.add_location(path, line)
239
+ end
240
+ tag_label = "@#{tag.tag_name}"
241
+ tag_label << " [#{tag.types.join(', ')}]" if tag.types
242
+ message.add_comment(tag_label)
243
+ end
244
+
245
+ def extract_tag_text(tag)
246
+ return if tag.text.nil?
247
+ return if tag.text.empty?
248
+ message = register_message(tag.text)
249
+ tag.object.files.each do |path, line|
250
+ message.add_location(path, line)
251
+ end
252
+ tag_label = "@#{tag.tag_name}"
253
+ tag_label << " [#{tag.types.join(', ')}]" if tag.types
254
+ tag_label << " #{tag.name}" if tag.name
255
+ message.add_comment(tag_label)
256
+ end
257
+
258
+ def extract_paragraphs(file)
259
+ File.open(file.filename) do |input|
260
+ text = Text.new(input, :have_header => true)
261
+ text.extract_messages do |type, *args|
262
+ case type
263
+ when :attribute
264
+ name, value, line_no = *args
265
+ message = register_message(value)
266
+ message.add_location(file.filename, line_no)
267
+ message.add_comment(name)
268
+ when :paragraph
269
+ paragraph, line_no = *args
270
+ message = register_message(paragraph.rstrip)
271
+ message.add_location(file.filename, line_no)
272
+ else
273
+ raise "should not reach here: unexpected type: #{type}"
274
+ end
275
+ end
276
+ end
277
+ end
278
+ end
279
+ end
280
+ end
@@ -0,0 +1,173 @@
1
+ module YARD
2
+ module I18n
3
+ # Provides some convenient features for translating a text.
4
+ class Text
5
+ # Creates a text object that has translation related features for
6
+ # the input text.
7
+ #
8
+ # @param [#each_line] input a text to be translated.
9
+ # @option options [Boolean] :have_header (false) whether the
10
+ # input text has header or not.
11
+ def initialize(input, options={})
12
+ @input = input
13
+ @options = options
14
+ end
15
+
16
+ # Extracts translation target messages from +@input+.
17
+ #
18
+ # @yield [:attribute, name, value, line_no] the block that
19
+ # recieves extracted an attribute in header. It may called many
20
+ # times.
21
+ # @yieldparam [String] name the name of extracted attribute.
22
+ # @yieldparam [String] value the value of extracted attribute.
23
+ # @yieldparam [Integer] line_no the defined line number of extracted
24
+ # attribute.
25
+ # @yield [:paragraph, text, start_line_no] the block that
26
+ # recieves extracted a paragraph in body. Paragraph is a text
27
+ # block separated by one or more empty lines. Empty line is a
28
+ # line that contains only zero or more whitespaces. It may
29
+ # called many times.
30
+ # @yieldparam [String] text the text of extracted paragraph.
31
+ # @yieldparam [Integer] start_line_no the start line number of
32
+ # extracted paragraph.
33
+ # @return [void]
34
+ def extract_messages
35
+ parse do |part|
36
+ line_no = part[:line_no]
37
+ case part[:type]
38
+ when :markup, :empty_line
39
+ # ignore
40
+ when :attribute
41
+ yield(:attribute, part[:name], part[:value], part[:line_no])
42
+ when :paragraph
43
+ yield(:paragraph, part[:paragraph], part[:line_no])
44
+ end
45
+ end
46
+ end
47
+
48
+ # Translates into +locale+.
49
+ #
50
+ # @param [Locale] locale the translation target locale.
51
+ # @return [String] translated text.
52
+ def translate(locale)
53
+ translated_text = ""
54
+ parse do |part|
55
+ case part[:type]
56
+ when :markup
57
+ translated_text << part[:line]
58
+ when :attribute
59
+ prefix = "#{part[:prefix]}#{part[:name]}#{part[:infix]}"
60
+ value = locale.translate(part[:value])
61
+ suffix = part[:suffix]
62
+ translated_text << "#{prefix}#{value}#{suffix}"
63
+ when :paragraph
64
+ translated_text << locale.translate(part[:paragraph])
65
+ when :empty_line
66
+ translated_text << part[:line]
67
+ else
68
+ raise "should not reach here: unexpected type: #{type}"
69
+ end
70
+ end
71
+ translated_text
72
+ end
73
+
74
+ private
75
+
76
+ def parse(&block)
77
+ paragraph = ""
78
+ paragraph_start_line = 0
79
+ line_no = 0
80
+ in_header = @options[:have_header]
81
+
82
+ @input.each_line do |line|
83
+ line_no += 1
84
+ if in_header
85
+ case line
86
+ when /^#!\S+\s*$/
87
+ if line_no == 1
88
+ emit_markup_event(line, line_no, &block)
89
+ else
90
+ in_header = false
91
+ end
92
+ when /^(\s*#\s*@)(\S+)(\s*)(.+?)(\s*)$/
93
+ emit_attribute_event(Regexp.last_match, line_no, &block)
94
+ else
95
+ in_header = false
96
+ if line.strip.empty?
97
+ emit_empty_line_event(line, line_no, &block)
98
+ next
99
+ end
100
+ end
101
+ next if in_header
102
+ end
103
+
104
+ case line
105
+ when /^\s*$/
106
+ if paragraph.empty?
107
+ emit_empty_line_event(line, line_no, &block)
108
+ else
109
+ paragraph << line
110
+ emit_paragraph_event(paragraph, paragraph_start_line, line_no,
111
+ &block)
112
+ paragraph = ""
113
+ end
114
+ else
115
+ paragraph_start_line = line_no if paragraph.empty?
116
+ paragraph << line
117
+ end
118
+ end
119
+
120
+ unless paragraph.empty?
121
+ emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
122
+ end
123
+ end
124
+
125
+ def emit_markup_event(line, line_no)
126
+ part = {
127
+ :type => :markup,
128
+ :line => line,
129
+ :line_no => line_no,
130
+ }
131
+ yield(part)
132
+ end
133
+
134
+ def emit_attribute_event(match_data, line_no)
135
+ part = {
136
+ :type => :attribute,
137
+ :prefix => match_data[1],
138
+ :name => match_data[2],
139
+ :infix => match_data[3],
140
+ :value => match_data[4],
141
+ :suffix => match_data[5],
142
+ :line_no => line_no,
143
+ }
144
+ yield(part)
145
+ end
146
+
147
+ def emit_empty_line_event(line, line_no)
148
+ part = {
149
+ :type => :empty_line,
150
+ :line => line,
151
+ :line_no => line_no,
152
+ }
153
+ yield(part)
154
+ end
155
+
156
+ def emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
157
+ paragraph_part = {
158
+ :type => :paragraph,
159
+ :line_no => paragraph_start_line,
160
+ }
161
+ match_data = /(\s*)\z/.match(paragraph)
162
+ if match_data
163
+ paragraph_part[:paragraph] = match_data.pre_match
164
+ yield(paragraph_part)
165
+ emit_empty_line_event(match_data[1], line_no, &block)
166
+ else
167
+ paragraph_part[:paragraph] = paragraph
168
+ yield(paragraph_part)
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end