nutshell-crm 0.0.1 → 0.0.2

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 (491) hide show
  1. data/Rakefile +4 -1
  2. data/lib/nutshell-crm.rb +274 -6
  3. data/lib/nutshell-crm/version.rb +1 -1
  4. data/nutshell-crm.gemspec +1 -0
  5. data/spec/nutshell-crm_spec.rb +40 -167
  6. data/vendor/bundle/bin/yard +19 -0
  7. data/vendor/bundle/bin/yardoc +19 -0
  8. data/vendor/bundle/bin/yri +19 -0
  9. data/vendor/bundle/gems/yard-0.7.4/.yardopts +18 -0
  10. data/vendor/bundle/gems/yard-0.7.4/ChangeLog +10533 -0
  11. data/vendor/bundle/gems/yard-0.7.4/LEGAL +74 -0
  12. data/vendor/bundle/gems/yard-0.7.4/LICENSE +22 -0
  13. data/vendor/bundle/gems/yard-0.7.4/README.md +514 -0
  14. data/vendor/bundle/gems/yard-0.7.4/Rakefile +99 -0
  15. data/vendor/bundle/gems/yard-0.7.4/benchmarks/builtins_vs_eval.rb +23 -0
  16. data/vendor/bundle/gems/yard-0.7.4/benchmarks/concat_vs_join.rb +12 -0
  17. data/vendor/bundle/gems/yard-0.7.4/benchmarks/erb_vs_erubis.rb +53 -0
  18. data/vendor/bundle/gems/yard-0.7.4/benchmarks/format_args.rb +46 -0
  19. data/vendor/bundle/gems/yard-0.7.4/benchmarks/generation.rb +37 -0
  20. data/vendor/bundle/gems/yard-0.7.4/benchmarks/marshal_vs_dbm.rb +63 -0
  21. data/vendor/bundle/gems/yard-0.7.4/benchmarks/parsing.rb +46 -0
  22. data/vendor/bundle/gems/yard-0.7.4/benchmarks/pathname_vs_string.rb +50 -0
  23. data/vendor/bundle/gems/yard-0.7.4/benchmarks/rdoc_vs_yardoc.rb +10 -0
  24. data/vendor/bundle/gems/yard-0.7.4/benchmarks/ri_vs_yri.rb +18 -0
  25. data/vendor/bundle/gems/yard-0.7.4/benchmarks/ripper_parser.rb +12 -0
  26. data/vendor/bundle/gems/yard-0.7.4/benchmarks/splat_vs_flatten.rb +12 -0
  27. data/vendor/bundle/gems/yard-0.7.4/benchmarks/template_erb.rb +22 -0
  28. data/vendor/bundle/gems/yard-0.7.4/benchmarks/template_format.rb +6 -0
  29. data/vendor/bundle/gems/yard-0.7.4/benchmarks/template_profile.rb +17 -0
  30. data/vendor/bundle/gems/yard-0.7.4/benchmarks/yri_cache.rb +19 -0
  31. data/vendor/bundle/gems/yard-0.7.4/bin/yard +4 -0
  32. data/vendor/bundle/gems/yard-0.7.4/bin/yard-graph +4 -0
  33. data/vendor/bundle/gems/yard-0.7.4/bin/yard-server +4 -0
  34. data/vendor/bundle/gems/yard-0.7.4/bin/yardoc +4 -0
  35. data/vendor/bundle/gems/yard-0.7.4/bin/yri +4 -0
  36. data/vendor/bundle/gems/yard-0.7.4/docs/CodeObjects.md +115 -0
  37. data/vendor/bundle/gems/yard-0.7.4/docs/GettingStarted.md +590 -0
  38. data/vendor/bundle/gems/yard-0.7.4/docs/Glossary.md +12 -0
  39. data/vendor/bundle/gems/yard-0.7.4/docs/Handlers.md +152 -0
  40. data/vendor/bundle/gems/yard-0.7.4/docs/Overview.md +61 -0
  41. data/vendor/bundle/gems/yard-0.7.4/docs/Parser.md +191 -0
  42. data/vendor/bundle/gems/yard-0.7.4/docs/Tags.md +586 -0
  43. data/vendor/bundle/gems/yard-0.7.4/docs/Templates.md +518 -0
  44. data/vendor/bundle/gems/yard-0.7.4/docs/WhatsNew.md +887 -0
  45. data/vendor/bundle/gems/yard-0.7.4/docs/images/code-objects-class-diagram.png +0 -0
  46. data/vendor/bundle/gems/yard-0.7.4/docs/images/handlers-class-diagram.png +0 -0
  47. data/vendor/bundle/gems/yard-0.7.4/docs/images/overview-class-diagram.png +0 -0
  48. data/vendor/bundle/gems/yard-0.7.4/docs/images/parser-class-diagram.png +0 -0
  49. data/vendor/bundle/gems/yard-0.7.4/docs/images/tags-class-diagram.png +0 -0
  50. data/vendor/bundle/gems/yard-0.7.4/lib/rubygems_plugin.rb +4 -0
  51. data/vendor/bundle/gems/yard-0.7.4/lib/yard.rb +57 -0
  52. data/vendor/bundle/gems/yard-0.7.4/lib/yard/autoload.rb +233 -0
  53. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/command.rb +73 -0
  54. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/command_parser.rb +89 -0
  55. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/config.rb +136 -0
  56. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/diff.rb +201 -0
  57. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/gems.rb +83 -0
  58. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/graph.rb +103 -0
  59. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/help.rb +18 -0
  60. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/list.rb +22 -0
  61. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/server.rb +160 -0
  62. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/stats.rb +210 -0
  63. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/yardoc.rb +696 -0
  64. data/vendor/bundle/gems/yard-0.7.4/lib/yard/cli/yri.rb +193 -0
  65. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/base.rb +513 -0
  66. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/class_object.rb +143 -0
  67. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/class_variable_object.rb +8 -0
  68. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/constant_object.rb +13 -0
  69. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/extended_method_object.rb +23 -0
  70. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/extra_file_object.rb +89 -0
  71. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/macro_object.rb +215 -0
  72. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/method_object.rb +153 -0
  73. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/module_object.rb +18 -0
  74. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/namespace_object.rb +200 -0
  75. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/proxy.rb +252 -0
  76. data/vendor/bundle/gems/yard-0.7.4/lib/yard/code_objects/root_object.rb +16 -0
  77. data/vendor/bundle/gems/yard-0.7.4/lib/yard/config.rb +259 -0
  78. data/vendor/bundle/gems/yard-0.7.4/lib/yard/core_ext/array.rb +15 -0
  79. data/vendor/bundle/gems/yard-0.7.4/lib/yard/core_ext/file.rb +65 -0
  80. data/vendor/bundle/gems/yard-0.7.4/lib/yard/core_ext/hash.rb +15 -0
  81. data/vendor/bundle/gems/yard-0.7.4/lib/yard/core_ext/insertion.rb +60 -0
  82. data/vendor/bundle/gems/yard-0.7.4/lib/yard/core_ext/module.rb +19 -0
  83. data/vendor/bundle/gems/yard-0.7.4/lib/yard/core_ext/string.rb +67 -0
  84. data/vendor/bundle/gems/yard-0.7.4/lib/yard/core_ext/symbol_hash.rb +73 -0
  85. data/vendor/bundle/gems/yard-0.7.4/lib/yard/docstring.rb +331 -0
  86. data/vendor/bundle/gems/yard-0.7.4/lib/yard/globals.rb +18 -0
  87. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/base.rb +569 -0
  88. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/processor.rb +187 -0
  89. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/alias_handler.rb +43 -0
  90. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/attribute_handler.rb +83 -0
  91. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/base.rb +160 -0
  92. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/class_condition_handler.rb +84 -0
  93. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/class_handler.rb +122 -0
  94. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  95. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  96. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  97. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  98. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -0
  99. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/attribute_handler.rb +61 -0
  100. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/base.rb +228 -0
  101. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +81 -0
  102. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/class_handler.rb +110 -0
  103. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  104. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  105. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  106. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  107. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/macro_handler.rb +39 -0
  108. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/method_handler.rb +78 -0
  109. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/mixin_handler.rb +41 -0
  110. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  111. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  112. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  113. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  114. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/macro_handler.rb +40 -0
  115. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/macro_handler_methods.rb +130 -0
  116. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  117. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/method_handler.rb +94 -0
  118. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  119. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/module_handler.rb +11 -0
  120. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  121. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/struct_handler_methods.rb +140 -0
  122. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  123. data/vendor/bundle/gems/yard-0.7.4/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  124. data/vendor/bundle/gems/yard-0.7.4/lib/yard/logging.rb +77 -0
  125. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/base.rb +56 -0
  126. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/c_parser.rb +501 -0
  127. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/ruby/ast_node.rb +399 -0
  128. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/ruby/legacy/ruby_lex.rb +1376 -0
  129. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/ruby/legacy/ruby_parser.rb +30 -0
  130. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/ruby/legacy/statement.rb +60 -0
  131. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/ruby/legacy/statement_list.rb +390 -0
  132. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/ruby/legacy/token_list.rb +66 -0
  133. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/ruby/ruby_parser.rb +542 -0
  134. data/vendor/bundle/gems/yard-0.7.4/lib/yard/parser/source_parser.rb +517 -0
  135. data/vendor/bundle/gems/yard-0.7.4/lib/yard/rake/yardoc_task.rb +75 -0
  136. data/vendor/bundle/gems/yard-0.7.4/lib/yard/registry.rb +400 -0
  137. data/vendor/bundle/gems/yard-0.7.4/lib/yard/registry_store.rb +252 -0
  138. data/vendor/bundle/gems/yard-0.7.4/lib/yard/rubygems/backports.rb +8 -0
  139. data/vendor/bundle/gems/yard-0.7.4/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  140. data/vendor/bundle/gems/yard-0.7.4/lib/yard/rubygems/backports/MIT.txt +20 -0
  141. data/vendor/bundle/gems/yard-0.7.4/lib/yard/rubygems/backports/gem.rb +8 -0
  142. data/vendor/bundle/gems/yard-0.7.4/lib/yard/rubygems/backports/source_index.rb +353 -0
  143. data/vendor/bundle/gems/yard-0.7.4/lib/yard/rubygems/doc_manager.rb +75 -0
  144. data/vendor/bundle/gems/yard-0.7.4/lib/yard/rubygems/specification.rb +41 -0
  145. data/vendor/bundle/gems/yard-0.7.4/lib/yard/serializers/base.rb +80 -0
  146. data/vendor/bundle/gems/yard-0.7.4/lib/yard/serializers/file_system_serializer.rb +92 -0
  147. data/vendor/bundle/gems/yard-0.7.4/lib/yard/serializers/process_serializer.rb +24 -0
  148. data/vendor/bundle/gems/yard-0.7.4/lib/yard/serializers/stdout_serializer.rb +32 -0
  149. data/vendor/bundle/gems/yard-0.7.4/lib/yard/serializers/yardoc_serializer.rb +122 -0
  150. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server.rb +11 -0
  151. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/adapter.rb +100 -0
  152. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/base.rb +192 -0
  153. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/display_file_command.rb +24 -0
  154. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/display_object_command.rb +51 -0
  155. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/frames_command.rb +32 -0
  156. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/library_command.rb +100 -0
  157. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/library_index_command.rb +24 -0
  158. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/list_command.rb +48 -0
  159. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/search_command.rb +72 -0
  160. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/commands/static_file_command.rb +50 -0
  161. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/doc_server_helper.rb +40 -0
  162. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/doc_server_serializer.rb +31 -0
  163. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/library_version.rb +227 -0
  164. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/rack_adapter.rb +83 -0
  165. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/router.rb +180 -0
  166. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/static_caching.rb +45 -0
  167. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  168. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  169. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  170. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/default/fulldoc/html/js/live.js +32 -0
  171. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  172. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/default/layout/html/headers.erb +16 -0
  173. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  174. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/frames/html/frames.erb +13 -0
  175. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/frames/html/setup.rb +3 -0
  176. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/full_list/html/full_list.erb +34 -0
  177. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/full_list/html/setup.rb +20 -0
  178. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  179. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  180. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  181. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  182. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  183. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  184. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  185. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/search/html/search.erb +19 -0
  186. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  187. data/vendor/bundle/gems/yard-0.7.4/lib/yard/server/webrick_adapter.rb +42 -0
  188. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/default_factory.rb +141 -0
  189. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/default_tag.rb +12 -0
  190. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/library.rb +201 -0
  191. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/option_tag.rb +12 -0
  192. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/overload_tag.rb +65 -0
  193. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/ref_tag.rb +7 -0
  194. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/ref_tag_list.rb +27 -0
  195. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/tag.rb +57 -0
  196. data/vendor/bundle/gems/yard-0.7.4/lib/yard/tags/tag_format_error.rb +6 -0
  197. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/engine.rb +173 -0
  198. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/erb_cache.rb +22 -0
  199. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/base_helper.rb +206 -0
  200. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/filter_helper.rb +26 -0
  201. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/html_helper.rb +520 -0
  202. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  203. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/markup/rdoc_markup.rb +85 -0
  204. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/markup_helper.rb +164 -0
  205. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/method_helper.rb +72 -0
  206. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/module_helper.rb +19 -0
  207. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/text_helper.rb +95 -0
  208. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/helpers/uml_helper.rb +46 -0
  209. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/section.rb +106 -0
  210. data/vendor/bundle/gems/yard-0.7.4/lib/yard/templates/template.rb +366 -0
  211. data/vendor/bundle/gems/yard-0.7.4/lib/yard/verifier.rb +148 -0
  212. data/vendor/bundle/gems/yard-0.7.4/spec/cli/command_parser_spec.rb +43 -0
  213. data/vendor/bundle/gems/yard-0.7.4/spec/cli/command_spec.rb +36 -0
  214. data/vendor/bundle/gems/yard-0.7.4/spec/cli/config_spec.rb +92 -0
  215. data/vendor/bundle/gems/yard-0.7.4/spec/cli/diff_spec.rb +172 -0
  216. data/vendor/bundle/gems/yard-0.7.4/spec/cli/gems_spec.rb +81 -0
  217. data/vendor/bundle/gems/yard-0.7.4/spec/cli/help_spec.rb +22 -0
  218. data/vendor/bundle/gems/yard-0.7.4/spec/cli/list_spec.rb +8 -0
  219. data/vendor/bundle/gems/yard-0.7.4/spec/cli/server_spec.rb +171 -0
  220. data/vendor/bundle/gems/yard-0.7.4/spec/cli/stats_spec.rb +90 -0
  221. data/vendor/bundle/gems/yard-0.7.4/spec/cli/yardoc_spec.rb +628 -0
  222. data/vendor/bundle/gems/yard-0.7.4/spec/cli/yri_spec.rb +87 -0
  223. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/base_spec.rb +334 -0
  224. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/class_object_spec.rb +225 -0
  225. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/code_object_list_spec.rb +33 -0
  226. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/constants_spec.rb +81 -0
  227. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/extra_file_object_spec.rb +132 -0
  228. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/macro_object_spec.rb +154 -0
  229. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/method_object_spec.rb +152 -0
  230. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/module_object_spec.rb +141 -0
  231. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/namespace_object_spec.rb +170 -0
  232. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/proxy_spec.rb +124 -0
  233. data/vendor/bundle/gems/yard-0.7.4/spec/code_objects/spec_helper.rb +3 -0
  234. data/vendor/bundle/gems/yard-0.7.4/spec/config_spec.rb +167 -0
  235. data/vendor/bundle/gems/yard-0.7.4/spec/core_ext/array_spec.rb +14 -0
  236. data/vendor/bundle/gems/yard-0.7.4/spec/core_ext/file_spec.rb +68 -0
  237. data/vendor/bundle/gems/yard-0.7.4/spec/core_ext/hash_spec.rb +14 -0
  238. data/vendor/bundle/gems/yard-0.7.4/spec/core_ext/insertion_spec.rb +37 -0
  239. data/vendor/bundle/gems/yard-0.7.4/spec/core_ext/module_spec.rb +15 -0
  240. data/vendor/bundle/gems/yard-0.7.4/spec/core_ext/string_spec.rb +42 -0
  241. data/vendor/bundle/gems/yard-0.7.4/spec/core_ext/symbol_hash_spec.rb +86 -0
  242. data/vendor/bundle/gems/yard-0.7.4/spec/docstring_spec.rb +400 -0
  243. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/alias_handler_spec.rb +80 -0
  244. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/attribute_handler_spec.rb +94 -0
  245. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/base_spec.rb +197 -0
  246. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/class_condition_handler_spec.rb +62 -0
  247. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/class_handler_spec.rb +246 -0
  248. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/class_variable_handler_spec.rb +11 -0
  249. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/constant_handler_spec.rb +64 -0
  250. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  251. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  252. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/class_condition_handler_001.rb.txt +61 -0
  253. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  254. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  255. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  256. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  257. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  258. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/macro_handler_001.rb.txt +83 -0
  259. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  260. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/method_handler_001.rb.txt +122 -0
  261. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/mixin_handler_001.rb.txt +33 -0
  262. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  263. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  264. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  265. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/visibility_handler_001.rb.txt +27 -0
  266. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/examples/yield_handler_001.rb.txt +55 -0
  267. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/exception_handler_spec.rb +48 -0
  268. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/extend_handler_spec.rb +23 -0
  269. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/legacy_base_spec.rb +128 -0
  270. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/macro_handler_spec.rb +157 -0
  271. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/method_condition_handler_spec.rb +14 -0
  272. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/method_handler_spec.rb +177 -0
  273. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/mixin_handler_spec.rb +50 -0
  274. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/module_handler_spec.rb +34 -0
  275. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/private_constant_handler_spec.rb +24 -0
  276. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/processor_spec.rb +23 -0
  277. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/ruby/base_spec.rb +90 -0
  278. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/ruby/legacy/base_spec.rb +78 -0
  279. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/spec_helper.rb +34 -0
  280. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/visibility_handler_spec.rb +34 -0
  281. data/vendor/bundle/gems/yard-0.7.4/spec/handlers/yield_handler_spec.rb +51 -0
  282. data/vendor/bundle/gems/yard-0.7.4/spec/logging_spec.rb +14 -0
  283. data/vendor/bundle/gems/yard-0.7.4/spec/parser/base_spec.rb +24 -0
  284. data/vendor/bundle/gems/yard-0.7.4/spec/parser/c_parser_spec.rb +231 -0
  285. data/vendor/bundle/gems/yard-0.7.4/spec/parser/examples/array.c.txt +3887 -0
  286. data/vendor/bundle/gems/yard-0.7.4/spec/parser/examples/example1.rb.txt +8 -0
  287. data/vendor/bundle/gems/yard-0.7.4/spec/parser/examples/extrafile.c.txt +8 -0
  288. data/vendor/bundle/gems/yard-0.7.4/spec/parser/examples/multifile.c.txt +6 -0
  289. data/vendor/bundle/gems/yard-0.7.4/spec/parser/examples/override.c.txt +424 -0
  290. data/vendor/bundle/gems/yard-0.7.4/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  291. data/vendor/bundle/gems/yard-0.7.4/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  292. data/vendor/bundle/gems/yard-0.7.4/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  293. data/vendor/bundle/gems/yard-0.7.4/spec/parser/ruby/ast_node_spec.rb +33 -0
  294. data/vendor/bundle/gems/yard-0.7.4/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  295. data/vendor/bundle/gems/yard-0.7.4/spec/parser/ruby/legacy/token_list_spec.rb +69 -0
  296. data/vendor/bundle/gems/yard-0.7.4/spec/parser/ruby/ruby_parser_spec.rb +257 -0
  297. data/vendor/bundle/gems/yard-0.7.4/spec/parser/source_parser_spec.rb +595 -0
  298. data/vendor/bundle/gems/yard-0.7.4/spec/parser/tag_parsing_spec.rb +18 -0
  299. data/vendor/bundle/gems/yard-0.7.4/spec/rake/yardoc_task_spec.rb +90 -0
  300. data/vendor/bundle/gems/yard-0.7.4/spec/registry_spec.rb +303 -0
  301. data/vendor/bundle/gems/yard-0.7.4/spec/registry_store_spec.rb +255 -0
  302. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/data/serialized_yardoc/checksums +1 -0
  303. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  304. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  305. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  306. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  307. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  308. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/file_system_serializer_spec.rb +124 -0
  309. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/spec_helper.rb +2 -0
  310. data/vendor/bundle/gems/yard-0.7.4/spec/serializers/yardoc_serializer_spec.rb +46 -0
  311. data/vendor/bundle/gems/yard-0.7.4/spec/server/adapter_spec.rb +38 -0
  312. data/vendor/bundle/gems/yard-0.7.4/spec/server/commands/base_spec.rb +87 -0
  313. data/vendor/bundle/gems/yard-0.7.4/spec/server/commands/library_command_spec.rb +39 -0
  314. data/vendor/bundle/gems/yard-0.7.4/spec/server/commands/static_file_command_spec.rb +84 -0
  315. data/vendor/bundle/gems/yard-0.7.4/spec/server/doc_server_serializer_spec.rb +58 -0
  316. data/vendor/bundle/gems/yard-0.7.4/spec/server/rack_adapter_spec.rb +18 -0
  317. data/vendor/bundle/gems/yard-0.7.4/spec/server/router_spec.rb +115 -0
  318. data/vendor/bundle/gems/yard-0.7.4/spec/server/spec_helper.rb +17 -0
  319. data/vendor/bundle/gems/yard-0.7.4/spec/server/static_caching_spec.rb +39 -0
  320. data/vendor/bundle/gems/yard-0.7.4/spec/server/webrick_servlet_spec.rb +20 -0
  321. data/vendor/bundle/gems/yard-0.7.4/spec/server_spec.rb +10 -0
  322. data/vendor/bundle/gems/yard-0.7.4/spec/spec_helper.rb +105 -0
  323. data/vendor/bundle/gems/yard-0.7.4/spec/tags/default_factory_spec.rb +138 -0
  324. data/vendor/bundle/gems/yard-0.7.4/spec/tags/default_tag_spec.rb +11 -0
  325. data/vendor/bundle/gems/yard-0.7.4/spec/tags/library_spec.rb +23 -0
  326. data/vendor/bundle/gems/yard-0.7.4/spec/tags/overload_tag_spec.rb +53 -0
  327. data/vendor/bundle/gems/yard-0.7.4/spec/tags/ref_tag_list_spec.rb +53 -0
  328. data/vendor/bundle/gems/yard-0.7.4/spec/templates/class_spec.rb +43 -0
  329. data/vendor/bundle/gems/yard-0.7.4/spec/templates/constant_spec.rb +40 -0
  330. data/vendor/bundle/gems/yard-0.7.4/spec/templates/engine_spec.rb +129 -0
  331. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/class001.html +280 -0
  332. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/class001.txt +36 -0
  333. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/class002.html +35 -0
  334. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/constant001.txt +25 -0
  335. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/constant002.txt +7 -0
  336. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/constant003.txt +11 -0
  337. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method001.html +130 -0
  338. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method001.txt +35 -0
  339. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method002.html +86 -0
  340. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method002.txt +20 -0
  341. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method003.html +159 -0
  342. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method003.txt +45 -0
  343. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method004.html +44 -0
  344. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method004.txt +10 -0
  345. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method005.html +99 -0
  346. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/method005.txt +33 -0
  347. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/module001.dot +33 -0
  348. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/module001.html +795 -0
  349. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/module001.txt +33 -0
  350. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/module002.html +319 -0
  351. data/vendor/bundle/gems/yard-0.7.4/spec/templates/examples/tag001.txt +82 -0
  352. data/vendor/bundle/gems/yard-0.7.4/spec/templates/helpers/base_helper_spec.rb +175 -0
  353. data/vendor/bundle/gems/yard-0.7.4/spec/templates/helpers/html_helper_spec.rb +541 -0
  354. data/vendor/bundle/gems/yard-0.7.4/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  355. data/vendor/bundle/gems/yard-0.7.4/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -0
  356. data/vendor/bundle/gems/yard-0.7.4/spec/templates/helpers/markup_helper_spec.rb +132 -0
  357. data/vendor/bundle/gems/yard-0.7.4/spec/templates/helpers/method_helper_spec.rb +75 -0
  358. data/vendor/bundle/gems/yard-0.7.4/spec/templates/helpers/shared_signature_examples.rb +121 -0
  359. data/vendor/bundle/gems/yard-0.7.4/spec/templates/helpers/text_helper_spec.rb +44 -0
  360. data/vendor/bundle/gems/yard-0.7.4/spec/templates/method_spec.rb +102 -0
  361. data/vendor/bundle/gems/yard-0.7.4/spec/templates/module_spec.rb +109 -0
  362. data/vendor/bundle/gems/yard-0.7.4/spec/templates/onefile_spec.rb +47 -0
  363. data/vendor/bundle/gems/yard-0.7.4/spec/templates/section_spec.rb +146 -0
  364. data/vendor/bundle/gems/yard-0.7.4/spec/templates/spec_helper.rb +42 -0
  365. data/vendor/bundle/gems/yard-0.7.4/spec/templates/tag_spec.rb +39 -0
  366. data/vendor/bundle/gems/yard-0.7.4/spec/templates/template_spec.rb +401 -0
  367. data/vendor/bundle/gems/yard-0.7.4/spec/verifier_spec.rb +86 -0
  368. data/vendor/bundle/gems/yard-0.7.4/templates/default/class/dot/setup.rb +6 -0
  369. data/vendor/bundle/gems/yard-0.7.4/templates/default/class/dot/superklass.erb +3 -0
  370. data/vendor/bundle/gems/yard-0.7.4/templates/default/class/html/constructor_details.erb +8 -0
  371. data/vendor/bundle/gems/yard-0.7.4/templates/default/class/html/setup.rb +1 -0
  372. data/vendor/bundle/gems/yard-0.7.4/templates/default/class/html/subclasses.erb +4 -0
  373. data/vendor/bundle/gems/yard-0.7.4/templates/default/class/setup.rb +36 -0
  374. data/vendor/bundle/gems/yard-0.7.4/templates/default/class/text/setup.rb +11 -0
  375. data/vendor/bundle/gems/yard-0.7.4/templates/default/class/text/subclasses.erb +5 -0
  376. data/vendor/bundle/gems/yard-0.7.4/templates/default/constant/text/header.erb +11 -0
  377. data/vendor/bundle/gems/yard-0.7.4/templates/default/constant/text/setup.rb +3 -0
  378. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/html/abstract.erb +4 -0
  379. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/html/deprecated.erb +1 -0
  380. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/html/index.erb +5 -0
  381. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/html/note.erb +6 -0
  382. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/html/private.erb +4 -0
  383. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/html/returns_void.erb +1 -0
  384. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/html/text.erb +1 -0
  385. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/html/todo.erb +6 -0
  386. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/setup.rb +49 -0
  387. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/text/abstract.erb +2 -0
  388. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/text/deprecated.erb +2 -0
  389. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/text/index.erb +2 -0
  390. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/text/note.erb +4 -0
  391. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/text/private.erb +2 -0
  392. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/text/returns_void.erb +1 -0
  393. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/text/text.erb +1 -0
  394. data/vendor/bundle/gems/yard-0.7.4/templates/default/docstring/text/todo.erb +4 -0
  395. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/css/common.css +1 -0
  396. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/css/full_list.css +55 -0
  397. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/css/style.css +322 -0
  398. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/frames.erb +13 -0
  399. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/full_list.erb +37 -0
  400. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/full_list_class.erb +2 -0
  401. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/full_list_files.erb +5 -0
  402. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/full_list_methods.erb +12 -0
  403. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/js/app.js +205 -0
  404. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/js/full_list.js +167 -0
  405. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/js/jquery.js +16 -0
  406. data/vendor/bundle/gems/yard-0.7.4/templates/default/fulldoc/html/setup.rb +198 -0
  407. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/dot/header.erb +6 -0
  408. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/dot/setup.rb +14 -0
  409. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/breadcrumb.erb +13 -0
  410. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/files.erb +11 -0
  411. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/footer.erb +5 -0
  412. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/headers.erb +17 -0
  413. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/index.erb +2 -0
  414. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/layout.erb +24 -0
  415. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/listing.erb +4 -0
  416. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/objects.erb +32 -0
  417. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/search.erb +5 -0
  418. data/vendor/bundle/gems/yard-0.7.4/templates/default/layout/html/setup.rb +71 -0
  419. data/vendor/bundle/gems/yard-0.7.4/templates/default/method/html/header.erb +16 -0
  420. data/vendor/bundle/gems/yard-0.7.4/templates/default/method/setup.rb +3 -0
  421. data/vendor/bundle/gems/yard-0.7.4/templates/default/method/text/header.erb +1 -0
  422. data/vendor/bundle/gems/yard-0.7.4/templates/default/method_details/html/header.erb +3 -0
  423. data/vendor/bundle/gems/yard-0.7.4/templates/default/method_details/html/method_signature.erb +18 -0
  424. data/vendor/bundle/gems/yard-0.7.4/templates/default/method_details/html/source.erb +10 -0
  425. data/vendor/bundle/gems/yard-0.7.4/templates/default/method_details/setup.rb +9 -0
  426. data/vendor/bundle/gems/yard-0.7.4/templates/default/method_details/text/header.erb +10 -0
  427. data/vendor/bundle/gems/yard-0.7.4/templates/default/method_details/text/method_signature.erb +12 -0
  428. data/vendor/bundle/gems/yard-0.7.4/templates/default/method_details/text/setup.rb +10 -0
  429. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/dot/child.erb +1 -0
  430. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/dot/dependencies.erb +3 -0
  431. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/dot/header.erb +6 -0
  432. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/dot/info.erb +14 -0
  433. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/dot/setup.rb +14 -0
  434. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/attribute_details.erb +11 -0
  435. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/attribute_summary.erb +8 -0
  436. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/box_info.erb +37 -0
  437. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/children.erb +8 -0
  438. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/constant_summary.erb +13 -0
  439. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/defines.erb +3 -0
  440. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/header.erb +5 -0
  441. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/inherited_attributes.erb +17 -0
  442. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/inherited_constants.erb +8 -0
  443. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/inherited_methods.erb +18 -0
  444. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/item_summary.erb +30 -0
  445. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/method_details_list.erb +9 -0
  446. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/method_summary.erb +14 -0
  447. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/methodmissing.erb +12 -0
  448. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/html/pre_docstring.erb +1 -0
  449. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/setup.rb +129 -0
  450. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/text/children.erb +10 -0
  451. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/text/class_meths_list.erb +8 -0
  452. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/text/extends.erb +8 -0
  453. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/text/header.erb +7 -0
  454. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/text/includes.erb +8 -0
  455. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/text/instance_meths_list.erb +8 -0
  456. data/vendor/bundle/gems/yard-0.7.4/templates/default/module/text/setup.rb +12 -0
  457. data/vendor/bundle/gems/yard-0.7.4/templates/default/onefile/html/files.erb +5 -0
  458. data/vendor/bundle/gems/yard-0.7.4/templates/default/onefile/html/layout.erb +22 -0
  459. data/vendor/bundle/gems/yard-0.7.4/templates/default/onefile/html/readme.erb +3 -0
  460. data/vendor/bundle/gems/yard-0.7.4/templates/default/onefile/html/setup.rb +43 -0
  461. data/vendor/bundle/gems/yard-0.7.4/templates/default/root/dot/child.erb +3 -0
  462. data/vendor/bundle/gems/yard-0.7.4/templates/default/root/dot/setup.rb +5 -0
  463. data/vendor/bundle/gems/yard-0.7.4/templates/default/root/html/setup.rb +1 -0
  464. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/html/example.erb +9 -0
  465. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/html/index.erb +3 -0
  466. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/html/option.erb +22 -0
  467. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/html/overload.erb +14 -0
  468. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/html/see.erb +8 -0
  469. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/html/tag.erb +20 -0
  470. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/setup.rb +50 -0
  471. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/text/example.erb +12 -0
  472. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/text/index.erb +1 -0
  473. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/text/option.erb +20 -0
  474. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/text/overload.erb +19 -0
  475. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/text/see.erb +11 -0
  476. data/vendor/bundle/gems/yard-0.7.4/templates/default/tags/text/tag.erb +13 -0
  477. data/vendor/bundle/gems/yard-0.7.4/templates/guide/class/html/setup.rb +1 -0
  478. data/vendor/bundle/gems/yard-0.7.4/templates/guide/docstring/html/setup.rb +1 -0
  479. data/vendor/bundle/gems/yard-0.7.4/templates/guide/fulldoc/html/css/style.css +93 -0
  480. data/vendor/bundle/gems/yard-0.7.4/templates/guide/fulldoc/html/js/app.js +33 -0
  481. data/vendor/bundle/gems/yard-0.7.4/templates/guide/fulldoc/html/setup.rb +54 -0
  482. data/vendor/bundle/gems/yard-0.7.4/templates/guide/layout/html/layout.erb +81 -0
  483. data/vendor/bundle/gems/yard-0.7.4/templates/guide/layout/html/setup.rb +24 -0
  484. data/vendor/bundle/gems/yard-0.7.4/templates/guide/method/html/header.erb +18 -0
  485. data/vendor/bundle/gems/yard-0.7.4/templates/guide/method/html/setup.rb +21 -0
  486. data/vendor/bundle/gems/yard-0.7.4/templates/guide/module/html/header.erb +7 -0
  487. data/vendor/bundle/gems/yard-0.7.4/templates/guide/module/html/method_list.erb +5 -0
  488. data/vendor/bundle/gems/yard-0.7.4/templates/guide/module/html/setup.rb +26 -0
  489. data/vendor/bundle/gems/yard-0.7.4/templates/guide/tags/html/setup.rb +8 -0
  490. data/vendor/bundle/specifications/yard-0.7.4.gemspec +28 -0
  491. metadata +505 -8
@@ -0,0 +1,399 @@
1
+ module YARD
2
+ module Parser
3
+ module Ruby
4
+ # Builds and s-expression by creating {AstNode} objects with
5
+ # the type provided by the first argument.
6
+ #
7
+ # @example An implicit list of keywords
8
+ # ast = s(s(:kw, "if"), s(:kw, "else"))
9
+ # ast.type # => :list
10
+ # @example A method call
11
+ # s(:command, s(:var_ref, "mymethod"))
12
+ #
13
+ # @overload s(*nodes, opts = {})
14
+ # @param [Array<AstNode>] nodes a list of nodes.
15
+ # @param [Hash] opts any extra options (docstring, file, source) to
16
+ # set on the object
17
+ # @return [AstNode] an implicit node where node.type == +:list+
18
+ # @overload s(type, *children, opts = {})
19
+ # @param [Symbol] type the node type
20
+ # @param [Array<AstNode>] children any child nodes inside this one
21
+ # @param [Hash] opts any extra options to set on the object
22
+ # @return [AstNode] a node of type +type+.
23
+ # @see AstNode#initialize
24
+ def s(*args)
25
+ type = Symbol === args.first ? args.shift : :list
26
+ opts = Hash === args.last ? args.pop : {}
27
+ AstNode.node_class_for(type).new(type, args, opts)
28
+ end
29
+
30
+ # An AST node is characterized by a type and a list of children. It
31
+ # is most easily represented by the s-expression {#s} such as:
32
+ # # AST for "if true; 5 end":
33
+ # s(s(:if, s(:var_ref, s(:kw, "true")), s(s(:int, "5")), nil))
34
+ #
35
+ # The node type is not considered part of the list, only its children.
36
+ # So +ast[0]+ does not refer to the type, but rather the first child
37
+ # (or object). Items that are not +AstNode+ objects can be part of the
38
+ # list, like Strings or Symbols representing names. To return only
39
+ # the AstNode children of the node, use {#children}.
40
+ class AstNode < Array
41
+ attr_accessor :docstring_hash_flag
42
+ attr_accessor :docstring, :docstring_range, :source, :group
43
+ attr_writer :source_range, :line_range, :file, :full_source
44
+ alias comments docstring
45
+ alias comments_range docstring_range
46
+ alias comments_hash_flag docstring_hash_flag
47
+ alias to_s source
48
+
49
+ # @return [Symbol] the node's unique symbolic type
50
+ attr_accessor :type
51
+
52
+ # @return [AstNode, nil] the node's parent or nil if it is a root node.
53
+ attr_accessor :parent
54
+
55
+ # @return [Range] the character range in {#full_source} represented
56
+ # by the node
57
+ def source_range
58
+ reset_line_info unless @source_range
59
+ @source_range
60
+ end
61
+
62
+ # @return [Range] the line range in {#full_source} represented
63
+ # by the node
64
+ def line_range
65
+ reset_line_info unless @line_range
66
+ @line_range
67
+ end
68
+
69
+ # @return [String] the filename the node was parsed from
70
+ def file
71
+ return parent.file if parent
72
+ @file
73
+ end
74
+
75
+ # @return [String] the full source that the node was parsed from
76
+ def full_source
77
+ return parent.full_source if parent
78
+ return @full_source if @full_source
79
+ return IO.read(@file) if file && File.exist?(file)
80
+ end
81
+
82
+ # @return [String] the parse of {#full_source} that the node represents
83
+ def source
84
+ return parent.full_source[source_range] if parent
85
+ full_source
86
+ end
87
+
88
+ # List of all known keywords
89
+ # @return [Hash]
90
+ KEYWORDS = { :class => true, :alias => true, :lambda => true, :do_block => true,
91
+ :def => true, :defs => true, :begin => true, :rescue => true, :rescue_mod => true,
92
+ :if => true, :if_mod => true, :else => true, :elsif => true, :case => true,
93
+ :when => true, :next => true, :break => true, :retry => true, :redo => true,
94
+ :return => true, :throw => true, :catch => true, :until => true, :until_mod => true,
95
+ :while => true, :while_mod => true, :yield => true, :yield0 => true, :zsuper => true,
96
+ :unless => true, :unless_mod => true, :for => true, :super => true, :return0 => true }
97
+
98
+ # @group Creating an AstNode
99
+
100
+ # Finds the node subclass that should be instantiated for a specific
101
+ # node type
102
+ #
103
+ # @param [Symbol] type the node type to find a subclass for
104
+ # @return [Class] a subclass of AstNode to instantiate the node with.
105
+ def self.node_class_for(type)
106
+ case type
107
+ when :params
108
+ ParameterNode
109
+ when :call, :fcall, :vcall, :command, :command_call
110
+ MethodCallNode
111
+ when :if, :elsif, :if_mod, :unless, :unless_mod
112
+ ConditionalNode
113
+ else
114
+ if type.to_s =~ /_ref\Z/
115
+ ReferenceNode
116
+ elsif type.to_s =~ /_literal\Z/
117
+ LiteralNode
118
+ elsif KEYWORDS.has_key?(type)
119
+ KeywordNode
120
+ else
121
+ AstNode
122
+ end
123
+ end
124
+ end
125
+
126
+ # Creates a new AST node
127
+ #
128
+ # @param [Symbol] type the type of node being created
129
+ # @param [Array<AstNode>] arr the child nodes
130
+ # @param [Hash] opts any extra line options
131
+ # @option opts [Fixnum] :line (nil) the line the node starts on in source
132
+ # @option opts [String] :char (nil) the character number the node starts on
133
+ # in source
134
+ # @option opts [Fixnum] :listline (nil) a special key like :line but for
135
+ # list nodes
136
+ # @option opts [Fixnum] :listchar (nil) a special key like :char but for
137
+ # list nodes
138
+ # @option opts [Boolean] :token (nil) whether the node represents a token
139
+ def initialize(type, arr, opts = {})
140
+ super(arr)
141
+ self.type = type
142
+ self.line_range = opts[:line]
143
+ self.source_range = opts[:char]
144
+ @fallback_line = opts[:listline]
145
+ @fallback_source = opts[:listchar]
146
+ @token = true if opts[:token]
147
+ end
148
+
149
+ # @return [Boolean] whether the node is equal to another by checking
150
+ # the list and type
151
+ # @private
152
+ def ==(ast)
153
+ super && type == ast.type
154
+ end
155
+
156
+ # @group Traversing a Node
157
+
158
+ # Searches through the node and all descendants and returns the
159
+ # first node with a type matching any of +node_types+, otherwise
160
+ # returns the original node (self).
161
+ #
162
+ # @example Returns the first method definition in a block of code
163
+ # ast = YARD.parse_string("if true; def x; end end").ast
164
+ # ast.jump(:def)
165
+ # # => s(:def, s(:ident, "x"), s(:params, nil, nil, nil, nil,
166
+ # # nil), s(s(:void_stmt, )))
167
+ # @example Returns first 'def' or 'class' statement
168
+ # ast = YARD.parse_string("class X; def y; end end")
169
+ # ast.jump(:def, :class).first
170
+ # # =>
171
+ # @example If the node types are not present in the AST
172
+ # ast = YARD.parse("def x; end")
173
+ # ast.jump(:def)
174
+ #
175
+ # @param [Array<Symbol>] node_types a set of node types to match
176
+ # @return [AstNode] the matching node, if one was found
177
+ # @return [self] if no node was found
178
+ def jump(*node_types)
179
+ traverse {|child| return(child) if node_types.include?(child.type) }
180
+ self
181
+ end
182
+
183
+ # @return [Array<AstNode>] the {AstNode} children inside the node
184
+ def children
185
+ @children ||= select {|e| AstNode === e }
186
+ end
187
+
188
+ # Traverses the object and yields each node (including descendants) in order.
189
+ #
190
+ # @yield each descendant node in order
191
+ # @yieldparam [AstNode] self, or a child/descendant node
192
+ # @return [void]
193
+ def traverse
194
+ nodes = [self]
195
+ nodes.each.with_index do |node, index|
196
+ yield node
197
+ nodes.insert index+1, *node.children
198
+ end
199
+ end
200
+
201
+ # @group Node Meta Types
202
+
203
+ # @return [Boolean] whether the node is a token
204
+ def token?
205
+ @token
206
+ end
207
+
208
+ # @return [Boolean] whether the node is a reference (variable,
209
+ # constant name)
210
+ def ref?
211
+ false
212
+ end
213
+
214
+ # @return [Boolean] whether the node is a literal value
215
+ def literal?
216
+ false
217
+ end
218
+
219
+ # @return [Boolean] whether the node is a keyword
220
+ def kw?
221
+ false
222
+ end
223
+
224
+ # @return [Boolean] whether the node is a method call
225
+ def call?
226
+ false
227
+ end
228
+
229
+ # @return [Boolean] whether the node is a if/elsif/else condition
230
+ def condition?
231
+ false
232
+ end
233
+
234
+ # @group Getting Line Information
235
+
236
+ # @return [Boolean] whether the node has a {#line_range} set
237
+ def has_line?
238
+ @line_range ? true : false
239
+ end
240
+
241
+ # @return [Fixnum] the starting line number of the node
242
+ def line
243
+ line_range && line_range.first
244
+ end
245
+
246
+ # @return [String] the first line of source represented by the node.
247
+ def first_line
248
+ full_source.split(/\r?\n/)[line - 1].strip
249
+ end
250
+
251
+ # @group Printing a Node
252
+
253
+ # @return [String] the first line of source the node represents
254
+ def show
255
+ "\t#{line}: #{first_line}"
256
+ end
257
+
258
+ # @return [nil] pretty prints the node
259
+ def pretty_print(q)
260
+ objs = self.dup + [:__last__]
261
+ objs.unshift(type) if type && type != :list
262
+
263
+ options = []
264
+ if @docstring
265
+ options << ['docstring', docstring]
266
+ end
267
+ if @source_range || @line_range
268
+ options << ['line', line_range]
269
+ options << ['source', source_range]
270
+ end
271
+ objs.pop if options.size == 0
272
+
273
+ q.group(3, 's(', ')') do
274
+ q.seplist(objs, nil, :each) do |v|
275
+ if v == :__last__
276
+ q.seplist(options, nil, :each) do |arr|
277
+ k, v2 = *arr
278
+ q.group(3) do
279
+ q.text k
280
+ q.group(3) do
281
+ q.text ': '
282
+ q.pp v2
283
+ end
284
+ end
285
+ end
286
+ else
287
+ q.pp v
288
+ end
289
+ end
290
+ end
291
+ end
292
+
293
+ # @return [String] inspects the object
294
+ def inspect
295
+ typeinfo = type && type != :list ? ':' + type.to_s + ', ' : ''
296
+ 's(' + typeinfo + map(&:inspect).join(", ") + ')'
297
+ end
298
+
299
+ # @endgroup
300
+
301
+ private
302
+
303
+ # Resets line information
304
+ # @return [void]
305
+ def reset_line_info
306
+ if size == 0
307
+ self.line_range = @fallback_line
308
+ self.source_range = @fallback_source
309
+ elsif children.size > 0
310
+ f, l = children.first, children.last
311
+ self.line_range = Range.new(f.line_range.first, l.line_range.last)
312
+ self.source_range = Range.new(f.source_range.first, l.source_range.last)
313
+ elsif @fallback_line || @fallback_source
314
+ self.line_range = @fallback_line
315
+ self.source_range = @fallback_source
316
+ else
317
+ self.line_range = 0...0
318
+ self.source_range = 0...0
319
+ end
320
+ end
321
+ end
322
+
323
+ class ReferenceNode < AstNode
324
+ def ref?; true end
325
+
326
+ def path
327
+ Array.new flatten
328
+ end
329
+
330
+ def namespace
331
+ Array.new flatten[0...-1]
332
+ end
333
+ end
334
+
335
+ class LiteralNode < AstNode
336
+ def literal?; true end
337
+ end
338
+
339
+ class KeywordNode < AstNode
340
+ def kw?; true end
341
+ end
342
+
343
+ class ParameterNode < AstNode
344
+ def required_params; self[0] end
345
+ def required_end_params; self[3] end
346
+ def optional_params; self[1] end
347
+ def splat_param; self[2] ? self[2][0] : nil end
348
+ def block_param; self[4] ? self[4][0] : nil end
349
+ end
350
+
351
+ class MethodCallNode < AstNode
352
+ def call?; true end
353
+ def namespace; first if index_adjust > 0 end
354
+
355
+ def method_name(name_only = false)
356
+ name = self[index_adjust]
357
+ name_only ? name.jump(:ident).first.to_sym : name
358
+ end
359
+
360
+ def parameters(include_block_param = true)
361
+ return [] if type == :vcall
362
+ params = self[1 + index_adjust]
363
+ return [] unless params
364
+ params = call_has_paren? ? params.first : params
365
+ return [] unless params
366
+ include_block_param ? params : params[0...-1]
367
+ end
368
+
369
+ def block_param; parameters.last end
370
+
371
+ private
372
+
373
+ def index_adjust
374
+ [:call, :command_call].include?(type) ? 2 : 0
375
+ end
376
+
377
+ def call_has_paren?
378
+ [:fcall, :call].include?(type)
379
+ end
380
+ end
381
+
382
+ class ConditionalNode < KeywordNode
383
+ def condition?; true end
384
+ def condition; first end
385
+ def then_block; self[1] end
386
+
387
+ def else_block
388
+ if self[2] && !cmod?
389
+ self[2].type == :elsif ? self[2] : self[2][0]
390
+ end
391
+ end
392
+
393
+ private
394
+
395
+ def cmod?; type =~ /_mod$/ end
396
+ end
397
+ end
398
+ end
399
+ end
@@ -0,0 +1,1376 @@
1
+ require "e2mmap"
2
+ require "irb/slex"
3
+
4
+ module YARD
5
+ module Parser::Ruby::Legacy
6
+ # Legacy lexical tokenizer module.
7
+ module RubyToken
8
+ EXPR_BEG = :EXPR_BEG
9
+ EXPR_MID = :EXPR_MID
10
+ EXPR_END = :EXPR_END
11
+ EXPR_ARG = :EXPR_ARG
12
+ EXPR_FNAME = :EXPR_FNAME
13
+ EXPR_DOT = :EXPR_DOT
14
+ EXPR_CLASS = :EXPR_CLASS
15
+
16
+ # Represents a token in the Ruby lexer
17
+ class Token
18
+ # @return [Integer] the line number in the file/stream the token is
19
+ # located.
20
+ attr_reader :line_no
21
+
22
+ # @return [Integer] the character number in the file/stream the token
23
+ # is located.
24
+ attr_reader :char_no
25
+
26
+ # @return [String] the token text value
27
+ attr_reader :text
28
+
29
+ # @return [Symbol] the lexical state at the token
30
+ attr_accessor :lex_state
31
+
32
+ # @private
33
+ NO_TEXT = "??".freeze
34
+
35
+ # Creates a new Token object
36
+ # @param [Integer] line_no the line number to initialize the token to
37
+ # @param [Integer] char_no the char number to initialize the token to
38
+ def initialize(line_no, char_no)
39
+ @line_no = line_no
40
+ @char_no = char_no
41
+ @text = NO_TEXT
42
+ end
43
+
44
+ # Chainable way to sets the text attribute
45
+ #
46
+ # @param [String] text the new text
47
+ # @return [Token] this token object
48
+ def set_text(text)
49
+ @text = text
50
+ self
51
+ end
52
+ end
53
+
54
+ # Represents a block
55
+ class TkBlockContents < Token
56
+ def text; '...' end
57
+ end
58
+
59
+ # Represents an end statement
60
+ class TkStatementEnd < Token
61
+ def text; '' end
62
+ end
63
+
64
+ class TkNode < Token
65
+ attr :node
66
+ end
67
+
68
+ # Represents whitespace
69
+ class TkWhitespace < Token
70
+ end
71
+
72
+ # Represents a Ruby identifier
73
+ class TkId < Token
74
+ def initialize(line_no, char_no, name)
75
+ super(line_no, char_no)
76
+ @name = name
77
+ end
78
+ attr :name
79
+ end
80
+
81
+ # Represents a Ruby keyword
82
+ class TkKW < TkId
83
+ end
84
+
85
+ # Represents a Ruby value
86
+ class TkVal < Token
87
+ def initialize(line_no, char_no, value = nil)
88
+ super(line_no, char_no)
89
+ set_text(value)
90
+ end
91
+ end
92
+
93
+ class TkOp < Token
94
+ def name
95
+ self.class.op_name
96
+ end
97
+ end
98
+
99
+ class TkOPASGN < TkOp
100
+ def initialize(line_no, char_no, op)
101
+ super(line_no, char_no)
102
+ op = TkReading2Token[op] unless op.kind_of?(Symbol)
103
+ @op = op
104
+ end
105
+ attr :op
106
+ end
107
+
108
+ class TkUnknownChar < Token
109
+ def initialize(line_no, char_no, id)
110
+ super(line_no, char_no)
111
+ @name = char_no > 255 ? '?' : char_no.chr
112
+ end
113
+ attr :name
114
+ end
115
+
116
+ class TkError < Token
117
+ end
118
+
119
+ # @private
120
+ def set_token_position(line, char)
121
+ @prev_line_no = line
122
+ @prev_char_no = char
123
+ end
124
+
125
+ # @private
126
+ def Token(token, value = nil)
127
+ tk = nil
128
+ case token
129
+ when String, Symbol
130
+ source = token.kind_of?(String) ? TkReading2Token : TkSymbol2Token
131
+ if (tk = source[token]).nil?
132
+ IRB.fail TkReading2TokenNoKey, token
133
+ end
134
+ tk = Token(tk[0], value)
135
+ else
136
+ if token
137
+ tk = if (token.ancestors & [TkId, TkVal, TkOPASGN, TkUnknownChar]).empty?
138
+ token.new(@prev_line_no, @prev_char_no)
139
+ else
140
+ token.new(@prev_line_no, @prev_char_no, value)
141
+ end
142
+ end
143
+ end
144
+ tk
145
+ end
146
+
147
+ # @private
148
+ TokenDefinitions = [
149
+ [:TkCLASS, TkKW, "class", EXPR_CLASS],
150
+ [:TkMODULE, TkKW, "module", EXPR_BEG],
151
+ [:TkDEF, TkKW, "def", EXPR_FNAME],
152
+ [:TkUNDEF, TkKW, "undef", EXPR_FNAME],
153
+ [:TkBEGIN, TkKW, "begin", EXPR_BEG],
154
+ [:TkRESCUE, TkKW, "rescue", EXPR_MID],
155
+ [:TkENSURE, TkKW, "ensure", EXPR_BEG],
156
+ [:TkEND, TkKW, "end", EXPR_END],
157
+ [:TkIF, TkKW, "if", EXPR_BEG, :TkIF_MOD],
158
+ [:TkUNLESS, TkKW, "unless", EXPR_BEG, :TkUNLESS_MOD],
159
+ [:TkTHEN, TkKW, "then", EXPR_BEG],
160
+ [:TkELSIF, TkKW, "elsif", EXPR_BEG],
161
+ [:TkELSE, TkKW, "else", EXPR_BEG],
162
+ [:TkCASE, TkKW, "case", EXPR_BEG],
163
+ [:TkWHEN, TkKW, "when", EXPR_BEG],
164
+ [:TkWHILE, TkKW, "while", EXPR_BEG, :TkWHILE_MOD],
165
+ [:TkUNTIL, TkKW, "until", EXPR_BEG, :TkUNTIL_MOD],
166
+ [:TkFOR, TkKW, "for", EXPR_BEG],
167
+ [:TkBREAK, TkKW, "break", EXPR_END],
168
+ [:TkNEXT, TkKW, "next", EXPR_END],
169
+ [:TkREDO, TkKW, "redo", EXPR_END],
170
+ [:TkRETRY, TkKW, "retry", EXPR_END],
171
+ [:TkIN, TkKW, "in", EXPR_BEG],
172
+ [:TkDO, TkKW, "do", EXPR_BEG],
173
+ [:TkRETURN, TkKW, "return", EXPR_MID],
174
+ [:TkYIELD, TkKW, "yield", EXPR_END],
175
+ [:TkSUPER, TkKW, "super", EXPR_END],
176
+ [:TkSELF, TkKW, "self", EXPR_END],
177
+ [:TkNIL, TkKW, "nil", EXPR_END],
178
+ [:TkTRUE, TkKW, "true", EXPR_END],
179
+ [:TkFALSE, TkKW, "false", EXPR_END],
180
+ [:TkAND, TkKW, "and", EXPR_BEG],
181
+ [:TkOR, TkKW, "or", EXPR_BEG],
182
+ [:TkNOT, TkKW, "not", EXPR_BEG],
183
+ [:TkIF_MOD, TkKW],
184
+ [:TkUNLESS_MOD, TkKW],
185
+ [:TkWHILE_MOD, TkKW],
186
+ [:TkUNTIL_MOD, TkKW],
187
+ [:TkALIAS, TkKW, "alias", EXPR_FNAME],
188
+ [:TkDEFINED, TkKW, "defined?", EXPR_END],
189
+ [:TklBEGIN, TkKW, "BEGIN", EXPR_END],
190
+ [:TklEND, TkKW, "END", EXPR_END],
191
+ [:Tk__LINE__, TkKW, "__LINE__", EXPR_END],
192
+ [:Tk__FILE__, TkKW, "__FILE__", EXPR_END],
193
+
194
+ [:TkIDENTIFIER, TkId],
195
+ [:TkFID, TkId],
196
+ [:TkGVAR, TkId],
197
+ [:TkIVAR, TkId],
198
+ [:TkCONSTANT, TkId],
199
+
200
+ [:TkINTEGER, TkVal],
201
+ [:TkFLOAT, TkVal],
202
+ [:TkSYMBOL, TkVal],
203
+ [:TkSTRING, TkVal],
204
+ [:TkXSTRING, TkVal],
205
+ [:TkREGEXP, TkVal],
206
+ [:TkCOMMENT, TkVal],
207
+
208
+ [:TkDSTRING, TkNode],
209
+ [:TkDXSTRING, TkNode],
210
+ [:TkDREGEXP, TkNode],
211
+ [:TkNTH_REF, TkId],
212
+ [:TkBACK_REF, TkId],
213
+
214
+ [:TkUPLUS, TkOp, "+@"],
215
+ [:TkUMINUS, TkOp, "-@"],
216
+ [:TkPOW, TkOp, "**"],
217
+ [:TkCMP, TkOp, "<=>"],
218
+ [:TkEQ, TkOp, "=="],
219
+ [:TkEQQ, TkOp, "==="],
220
+ [:TkNEQ, TkOp, "!="],
221
+ [:TkGEQ, TkOp, ">="],
222
+ [:TkLEQ, TkOp, "<="],
223
+ [:TkANDOP, TkOp, "&&"],
224
+ [:TkOROP, TkOp, "||"],
225
+ [:TkMATCH, TkOp, "=~"],
226
+ [:TkNMATCH, TkOp, "!~"],
227
+ [:TkDOT2, TkOp, ".."],
228
+ [:TkDOT3, TkOp, "..."],
229
+ [:TkAREF, TkOp, "[]"],
230
+ [:TkASET, TkOp, "[]="],
231
+ [:TkLSHFT, TkOp, "<<"],
232
+ [:TkRSHFT, TkOp, ">>"],
233
+ [:TkCOLON2, TkOp],
234
+ [:TkCOLON3, TkOp],
235
+ [:OPASGN, TkOp], # +=, -= etc. #
236
+ [:TkASSOC, TkOp, "=>"],
237
+ [:TkQUESTION, TkOp, "?"], #?
238
+ [:TkCOLON, TkOp, ":"], #:
239
+
240
+ # [:TkfLPAREN], # func( #
241
+ # [:TkfLBRACK], # func[ #
242
+ # [:TkfLBRACE], # func{ #
243
+ [:TkSTAR], # *arg
244
+ [:TkAMPER], # &arg #
245
+ # [:TkSYMBOL, TkId], # :SYMBOL
246
+ [:TkSYMBEG, TkId],
247
+ [:TkGT, TkOp, ">"],
248
+ [:TkLT, TkOp, "<"],
249
+ [:TkPLUS, TkOp, "+"],
250
+ [:TkMINUS, TkOp, "-"],
251
+ [:TkMULT, TkOp, "*"],
252
+ [:TkDIV, TkOp, "/"],
253
+ [:TkMOD, TkOp, "%"],
254
+ [:TkBITOR, TkOp, "|"],
255
+ [:TkBITXOR, TkOp, "^"],
256
+ [:TkBITAND, TkOp, "&"],
257
+ [:TkBITNOT, TkOp, "~"],
258
+ [:TkNOTOP, TkOp, "!"],
259
+
260
+ [:TkBACKQUOTE, TkOp, "`"],
261
+
262
+ [:TkASSIGN, Token, "="],
263
+ [:TkDOT, Token, "."],
264
+ [:TkLPAREN, Token, "("], #(exp)
265
+ [:TkLBRACK, Token, "["], #[arry]
266
+ [:TkLBRACE, Token, "{"], #{hash}
267
+ [:TkRPAREN, Token, ")"],
268
+ [:TkRBRACK, Token, "]"],
269
+ [:TkRBRACE, Token, "}"],
270
+ [:TkCOMMA, Token, ","],
271
+ [:TkSEMICOLON, Token, ";"],
272
+
273
+ # [:TkRD_COMMENT, TkVal],
274
+ [:TkSPACE, TkWhitespace],
275
+ [:TkNL, TkWhitespace],
276
+ [:TkEND_OF_SCRIPT, TkWhitespace],
277
+
278
+ [:TkBACKSLASH, TkUnknownChar, "\\"],
279
+ [:TkAT, TkUnknownChar, "@"],
280
+ [:TkDOLLAR, TkUnknownChar, "\$"], #"
281
+ ]
282
+
283
+ # { reading => token_class }
284
+ # { reading => [token_class, *opt] }
285
+ TkReading2Token = {}
286
+ TkSymbol2Token = {}
287
+
288
+ # @private
289
+ def RubyToken.def_token(token_n, super_token = Token, reading = nil, *opts)
290
+ token_n = token_n.id2name unless token_n.kind_of?(String)
291
+ if RubyToken.const_defined?(token_n)
292
+ # IRB.fail AlreadyDefinedToken, token_n
293
+ end
294
+
295
+ token_c = Class.new super_token
296
+ RubyToken.const_set token_n, token_c
297
+ # token_c.inspect
298
+
299
+ if reading
300
+ if TkReading2Token[reading]
301
+ IRB.fail TkReading2TokenDuplicateError, token_n, reading
302
+ end
303
+ if opts.empty?
304
+ TkReading2Token[reading] = [token_c]
305
+ else
306
+ TkReading2Token[reading] = [token_c].concat(opts)
307
+ end
308
+ end
309
+ TkSymbol2Token[token_n.intern] = token_c
310
+
311
+ if token_c <= TkOp
312
+ token_c.class_eval %{
313
+ def self.op_name; "#{reading}"; end
314
+ }
315
+ end
316
+ end
317
+
318
+ for defs in TokenDefinitions
319
+ def_token(*defs)
320
+ end
321
+
322
+ NEWLINE_TOKEN = TkNL.new(0,0)
323
+ NEWLINE_TOKEN.set_text("\n")
324
+
325
+ end
326
+
327
+
328
+
329
+ # Lexical analyzer for Ruby source
330
+ # @private
331
+ class RubyLex
332
+ # Read an input stream character by character. We allow for unlimited
333
+ # ungetting of characters just read.
334
+ #
335
+ # We simplify the implementation greatly by reading the entire input
336
+ # into a buffer initially, and then simply traversing it using
337
+ # pointers.
338
+ #
339
+ # We also have to allow for the <i>here document diversion</i>. This
340
+ # little gem comes about when the lexer encounters a here
341
+ # document. At this point we effectively need to split the input
342
+ # stream into two parts: one to read the body of the here document,
343
+ # the other to read the rest of the input line where the here
344
+ # document was initially encountered. For example, we might have
345
+ #
346
+ # do_something(<<-A, <<-B)
347
+ # stuff
348
+ # for
349
+ # A
350
+ # stuff
351
+ # for
352
+ # B
353
+ #
354
+ # When the lexer encounters the <<A, it reads until the end of the
355
+ # line, and keeps it around for later. It then reads the body of the
356
+ # here document. Once complete, it needs to read the rest of the
357
+ # original line, but then skip the here document body.
358
+ #
359
+ # @private
360
+ class BufferedReader
361
+
362
+ attr_reader :line_num
363
+
364
+ def initialize(content)
365
+ if /\t/ =~ content
366
+ tab_width = 2
367
+ content = content.split(/\n/).map do |line|
368
+ 1 while line.gsub!(/\t+/) { ' ' * (tab_width*$&.length - $`.length % tab_width)} && $~ #`
369
+ line
370
+ end .join("\n")
371
+ end
372
+ @content = content
373
+ @content << "\n" unless @content[-1,1] == "\n"
374
+ @size = @content.size
375
+ @offset = 0
376
+ @hwm = 0
377
+ @line_num = 1
378
+ @read_back_offset = 0
379
+ @last_newline = 0
380
+ @newline_pending = false
381
+ end
382
+
383
+ def column
384
+ @offset - @last_newline
385
+ end
386
+
387
+ def getc
388
+ return nil if @offset >= @size
389
+ ch = @content[@offset, 1]
390
+
391
+ @offset += 1
392
+ @hwm = @offset if @hwm < @offset
393
+
394
+ if @newline_pending
395
+ @line_num += 1
396
+ @last_newline = @offset - 1
397
+ @newline_pending = false
398
+ end
399
+
400
+ if ch == "\n"
401
+ @newline_pending = true
402
+ end
403
+ ch
404
+ end
405
+
406
+ def getc_already_read
407
+ getc
408
+ end
409
+
410
+ def ungetc(ch)
411
+ raise "unget past beginning of file" if @offset <= 0
412
+ @offset -= 1
413
+ if @content[@offset] == ?\n
414
+ @newline_pending = false
415
+ end
416
+ end
417
+
418
+ def get_read
419
+ res = @content[@read_back_offset...@offset]
420
+ @read_back_offset = @offset
421
+ res
422
+ end
423
+
424
+ def peek(at)
425
+ pos = @offset + at
426
+ if pos >= @size
427
+ nil
428
+ else
429
+ @content[pos, 1]
430
+ end
431
+ end
432
+
433
+ def peek_equal(str)
434
+ @content[@offset, str.length] == str
435
+ end
436
+
437
+ def divert_read_from(reserve)
438
+ @content[@offset, 0] = reserve
439
+ @size = @content.size
440
+ end
441
+ end
442
+
443
+ # end of nested class BufferedReader
444
+
445
+ extend Exception2MessageMapper
446
+ def_exception(:AlreadyDefinedToken, "Already defined token(%s)")
447
+ def_exception(:TkReading2TokenNoKey, "key nothing(key='%s')")
448
+ def_exception(:TkSymbol2TokenNoKey, "key nothing(key='%s')")
449
+ def_exception(:TkReading2TokenDuplicateError,
450
+ "key duplicate(token_n='%s', key='%s')")
451
+ def_exception(:SyntaxError, "%s")
452
+
453
+ include RubyToken
454
+ include IRB
455
+
456
+ attr_reader :continue
457
+ attr_reader :lex_state
458
+
459
+ def RubyLex.debug?
460
+ false
461
+ end
462
+
463
+ def initialize(content)
464
+ lex_init
465
+
466
+ @reader = BufferedReader.new(content)
467
+
468
+ @exp_line_no = @line_no = 1
469
+ @base_char_no = 0
470
+ @indent = 0
471
+
472
+ @ltype = nil
473
+ @quoted = nil
474
+ @lex_state = EXPR_BEG
475
+ @space_seen = false
476
+
477
+ @continue = false
478
+ @line = ""
479
+
480
+ @skip_space = false
481
+ @read_auto_clean_up = false
482
+ @exception_on_syntax_error = true
483
+ end
484
+
485
+ attr_accessor :skip_space
486
+ attr_accessor :read_auto_clean_up
487
+ attr_accessor :exception_on_syntax_error
488
+
489
+ attr :indent
490
+
491
+ # io functions
492
+ def line_no
493
+ @reader.line_num
494
+ end
495
+
496
+ def char_no
497
+ @reader.column
498
+ end
499
+
500
+ def get_read
501
+ @reader.get_read
502
+ end
503
+
504
+ def getc
505
+ @reader.getc
506
+ end
507
+
508
+ def getc_of_rests
509
+ @reader.getc_already_read
510
+ end
511
+
512
+ def gets
513
+ c = getc or return
514
+ l = ""
515
+ begin
516
+ l.concat c unless c == "\r"
517
+ break if c == "\n"
518
+ end while c = getc
519
+ l
520
+ end
521
+
522
+
523
+ def ungetc(c = nil)
524
+ @reader.ungetc(c)
525
+ end
526
+
527
+ def peek_equal?(str)
528
+ @reader.peek_equal(str)
529
+ end
530
+
531
+ def peek(i = 0)
532
+ @reader.peek(i)
533
+ end
534
+
535
+ def lex
536
+ catch(:eof) do
537
+ until (((tk = token).kind_of?(TkNL) || tk.kind_of?(TkEND_OF_SCRIPT)) &&
538
+ !@continue or
539
+ tk.nil?)
540
+ end
541
+ line = get_read
542
+
543
+ if line == "" and tk.kind_of?(TkEND_OF_SCRIPT) || tk.nil?
544
+ nil
545
+ else
546
+ line
547
+ end
548
+ end
549
+ end
550
+
551
+ def token
552
+ set_token_position(line_no, char_no)
553
+ catch(:eof) do
554
+ begin
555
+ begin
556
+ tk = @OP.match(self)
557
+ @space_seen = tk.kind_of?(TkSPACE)
558
+ rescue SyntaxError
559
+ abort if @exception_on_syntax_error
560
+ tk = TkError.new(line_no, char_no)
561
+ end
562
+ end while @skip_space and tk.kind_of?(TkSPACE)
563
+ if @read_auto_clean_up
564
+ get_read
565
+ end
566
+ # throw :eof unless tk
567
+ p tk if $DEBUG
568
+ tk.lex_state = lex_state if tk
569
+ tk
570
+ end
571
+ end
572
+
573
+ ENINDENT_CLAUSE = [
574
+ "case", "class", "def", "do", "for", "if",
575
+ "module", "unless", "until", "while", "begin" #, "when"
576
+ ]
577
+ ACCEPTS_COLON = ["if", "for", "unless", "until", "while"]
578
+ DEINDENT_CLAUSE = ["end" #, "when"
579
+ ]
580
+
581
+ PERCENT_LTYPE = {
582
+ "q" => "\'",
583
+ "Q" => "\"",
584
+ "x" => "\`",
585
+ "r" => "/",
586
+ "w" => "]",
587
+ "W" => "]"
588
+ }
589
+
590
+ PERCENT_PAREN = {
591
+ "{" => "}",
592
+ "[" => "]",
593
+ "<" => ">",
594
+ "(" => ")"
595
+ }
596
+
597
+ Ltype2Token = {
598
+ "\'" => TkSTRING,
599
+ "\"" => TkSTRING,
600
+ "\`" => TkXSTRING,
601
+ "/" => TkREGEXP,
602
+ "]" => TkDSTRING
603
+ }
604
+ Ltype2Token.default = TkSTRING
605
+
606
+ DLtype2Token = {
607
+ "\"" => TkDSTRING,
608
+ "\`" => TkDXSTRING,
609
+ "/" => TkDREGEXP,
610
+ }
611
+
612
+ def lex_init()
613
+ @OP = SLex.new
614
+ @OP.def_rules("\0", "\004", "\032") do |chars, io|
615
+ Token(TkEND_OF_SCRIPT).set_text(chars)
616
+ end
617
+
618
+ @OP.def_rules(" ", "\t", "\f", "\r", "\13") do |chars, io|
619
+ @space_seen = TRUE
620
+ while (ch = getc) =~ /[ \t\f\r\13]/
621
+ chars << ch
622
+ end
623
+ ungetc
624
+ Token(TkSPACE).set_text(chars)
625
+ end
626
+
627
+ @OP.def_rule("#") do
628
+ |op, io|
629
+ identify_comment
630
+ end
631
+
632
+ @OP.def_rule("=begin", proc{@prev_char_no == 0 && peek(0) =~ /\s/}) do
633
+ |op, io|
634
+ str = op
635
+ @ltype = "="
636
+
637
+
638
+ begin
639
+ line = ""
640
+ begin
641
+ ch = getc
642
+ line << ch
643
+ end until ch == "\n"
644
+ str << line
645
+ end until line =~ /^=end/
646
+
647
+ ungetc
648
+
649
+ @ltype = nil
650
+
651
+ if str =~ /\A=begin\s+rdoc/i
652
+ str.sub!(/\A=begin.*\n/, '')
653
+ str.sub!(/^=end.*/m, '')
654
+ Token(TkCOMMENT).set_text(str)
655
+ else
656
+ Token(TkCOMMENT).set_text(str)
657
+ end
658
+ end
659
+
660
+ @OP.def_rule("\n") do
661
+ print "\\n\n" if RubyLex.debug?
662
+ @colonblock_seen = false
663
+ case @lex_state
664
+ when EXPR_BEG, EXPR_FNAME, EXPR_DOT
665
+ @continue = TRUE
666
+ else
667
+ @continue = FALSE
668
+ @lex_state = EXPR_BEG
669
+ end
670
+ Token(TkNL).set_text("\n")
671
+ end
672
+
673
+ @OP.def_rules("*", "**",
674
+ "!", "!=", "!~",
675
+ "=", "==", "===",
676
+ "=~", "<=>",
677
+ "<", "<=",
678
+ ">", ">=", ">>") do |op, io|
679
+ @lex_state = EXPR_BEG
680
+ Token(op).set_text(op)
681
+ end
682
+
683
+ @OP.def_rules("<<") do |op, io|
684
+ tk = nil
685
+ if @lex_state != EXPR_END && @lex_state != EXPR_CLASS &&
686
+ (@lex_state != EXPR_ARG || @space_seen)
687
+ c = peek(0)
688
+ tk = identify_here_document if /[-\w_\"\'\`]/ =~ c
689
+ end
690
+ if !tk
691
+ @lex_state = EXPR_BEG
692
+ tk = Token(op).set_text(op)
693
+ end
694
+ tk
695
+ end
696
+
697
+ @OP.def_rules("'", '"') do |op, io|
698
+ identify_string(op)
699
+ end
700
+
701
+ @OP.def_rules("`") do |op, io|
702
+ if @lex_state == EXPR_FNAME
703
+ Token(op).set_text(op)
704
+ else
705
+ identify_string(op)
706
+ end
707
+ end
708
+
709
+ @OP.def_rules('?') do |op, io|
710
+ if @lex_state == EXPR_END
711
+ @lex_state = EXPR_BEG
712
+ Token(TkQUESTION).set_text(op)
713
+ else
714
+ ch = getc
715
+ if @lex_state == EXPR_ARG && ch !~ /\s/
716
+ ungetc
717
+ @lex_state = EXPR_BEG
718
+ Token(TkQUESTION).set_text(op)
719
+ else
720
+ str = op
721
+ str << ch
722
+ if (ch == '\\') #'
723
+ str << read_escape
724
+ end
725
+ @lex_state = EXPR_END
726
+ Token(TkINTEGER).set_text(str)
727
+ end
728
+ end
729
+ end
730
+
731
+ @OP.def_rules("&", "&&", "|", "||") do |op, io|
732
+ @lex_state = EXPR_BEG
733
+ Token(op).set_text(op)
734
+ end
735
+
736
+ @OP.def_rules("+=", "-=", "*=", "**=",
737
+ "&=", "|=", "^=", "<<=", ">>=", "||=", "&&=") do |op, io|
738
+ @lex_state = EXPR_BEG
739
+ op =~ /^(.*)=$/
740
+ Token(TkOPASGN, $1).set_text(op)
741
+ end
742
+
743
+ @OP.def_rule("+@", proc{@lex_state == EXPR_FNAME}) do |op, io|
744
+ Token(TkUPLUS).set_text(op)
745
+ end
746
+
747
+ @OP.def_rule("-@", proc{@lex_state == EXPR_FNAME}) do |op, io|
748
+ Token(TkUMINUS).set_text(op)
749
+ end
750
+
751
+ @OP.def_rules("+", "-") do |op, io|
752
+ catch(:RET) do
753
+ if @lex_state == EXPR_ARG
754
+ if @space_seen and peek(0) =~ /[0-9]/
755
+ throw :RET, identify_number(op)
756
+ else
757
+ @lex_state = EXPR_BEG
758
+ end
759
+ elsif @lex_state != EXPR_END and peek(0) =~ /[0-9]/
760
+ throw :RET, identify_number(op)
761
+ else
762
+ @lex_state = EXPR_BEG
763
+ end
764
+ Token(op).set_text(op)
765
+ end
766
+ end
767
+
768
+ @OP.def_rule(".") do
769
+ @lex_state = EXPR_BEG
770
+ if peek(0) =~ /[0-9]/
771
+ ungetc
772
+ identify_number("")
773
+ else
774
+ # for obj.if
775
+ @lex_state = EXPR_DOT
776
+ Token(TkDOT).set_text(".")
777
+ end
778
+ end
779
+
780
+ @OP.def_rules("..", "...") do |op, io|
781
+ @lex_state = EXPR_BEG
782
+ Token(op).set_text(op)
783
+ end
784
+
785
+ lex_int2
786
+ end
787
+
788
+ def lex_int2
789
+ @OP.def_rules("]", "}", ")") do
790
+ |op, io|
791
+ @lex_state = EXPR_END
792
+ @indent -= 1
793
+ Token(op).set_text(op)
794
+ end
795
+
796
+ @OP.def_rule(":") do
797
+ if (@colonblock_seen && @lex_state != EXPR_BEG) || peek(0) =~ /\s/
798
+ @lex_state = EXPR_BEG
799
+ tk = Token(TkCOLON)
800
+ else
801
+ @lex_state = EXPR_FNAME
802
+ tk = Token(TkSYMBEG)
803
+ end
804
+ tk.set_text(":")
805
+ end
806
+
807
+ @OP.def_rule("::") do
808
+ # p @lex_state.id2name, @space_seen
809
+ if @lex_state == EXPR_BEG or @lex_state == EXPR_ARG && @space_seen
810
+ @lex_state = EXPR_BEG
811
+ tk = Token(TkCOLON3)
812
+ else
813
+ @lex_state = EXPR_DOT
814
+ tk = Token(TkCOLON2)
815
+ end
816
+ tk.set_text("::")
817
+ end
818
+
819
+ @OP.def_rule("/") do |op, io|
820
+ if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
821
+ identify_string(op)
822
+ elsif peek(0) == '='
823
+ getc
824
+ @lex_state = EXPR_BEG
825
+ Token(TkOPASGN, :/).set_text("/=") #")
826
+ elsif @lex_state == EXPR_ARG and @space_seen and peek(0) !~ /\s/
827
+ identify_string(op)
828
+ else
829
+ @lex_state = EXPR_BEG
830
+ Token("/").set_text(op)
831
+ end
832
+ end
833
+
834
+ @OP.def_rules("^") do
835
+ @lex_state = EXPR_BEG
836
+ Token("^").set_text("^")
837
+ end
838
+
839
+ # @OP.def_rules("^=") do
840
+ # @lex_state = EXPR_BEG
841
+ # Token(TkOPASGN, :^)
842
+ # end
843
+
844
+ @OP.def_rules(",", ";") do |op, io|
845
+ @colonblock_seen = false
846
+ @lex_state = EXPR_BEG
847
+ Token(op).set_text(op)
848
+ end
849
+
850
+ @OP.def_rule("~") do
851
+ @lex_state = EXPR_BEG
852
+ Token("~").set_text("~")
853
+ end
854
+
855
+ @OP.def_rule("~@", proc{@lex_state = EXPR_FNAME}) do
856
+ @lex_state = EXPR_BEG
857
+ Token("~").set_text("~@")
858
+ end
859
+
860
+ @OP.def_rule("(") do
861
+ @indent += 1
862
+ # if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
863
+ # @lex_state = EXPR_BEG
864
+ # tk = Token(TkfLPAREN)
865
+ # else
866
+ @lex_state = EXPR_BEG
867
+ tk = Token(TkLPAREN)
868
+ # end
869
+ tk.set_text("(")
870
+ end
871
+
872
+ @OP.def_rule("[]", proc{@lex_state == EXPR_FNAME}) do
873
+ Token("[]").set_text("[]")
874
+ end
875
+
876
+ @OP.def_rule("[]=", proc{@lex_state == EXPR_FNAME}) do
877
+ Token("[]=").set_text("[]=")
878
+ end
879
+
880
+ @OP.def_rule("[") do
881
+ @indent += 1
882
+ # if @lex_state == EXPR_FNAME
883
+ # t = Token(TkfLBRACK)
884
+ # else
885
+ # if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
886
+ # t = Token(TkLBRACK)
887
+ # elsif @lex_state == EXPR_ARG && @space_seen
888
+ # else
889
+ # t = Token(TkfLBRACK)
890
+ # end
891
+ # end
892
+ t = Token(TkLBRACK)
893
+ @lex_state = EXPR_BEG
894
+ t.set_text("[")
895
+ end
896
+
897
+ @OP.def_rule("{") do
898
+ @indent += 1
899
+ # if @lex_state != EXPR_END && @lex_state != EXPR_ARG
900
+ # t = Token(TkLBRACE)
901
+ # else
902
+ # t = Token(TkfLBRACE)
903
+ # end
904
+ t = Token(TkLBRACE)
905
+ @lex_state = EXPR_BEG
906
+ t.set_text("{")
907
+ end
908
+
909
+ @OP.def_rule('\\') do #'
910
+ if getc == "\n"
911
+ @space_seen = true
912
+ @continue = true
913
+ Token(TkSPACE).set_text("\\\n")
914
+ else
915
+ ungetc
916
+ Token("\\").set_text("\\") #"
917
+ end
918
+ end
919
+
920
+ @OP.def_rule('%') do
921
+ |op, io|
922
+ if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
923
+ identify_quotation('%')
924
+ elsif peek(0) == '='
925
+ getc
926
+ Token(TkOPASGN, "%").set_text("%=")
927
+ elsif @lex_state == EXPR_ARG and @space_seen and peek(0) !~ /\s/
928
+ identify_quotation('%')
929
+ else
930
+ @lex_state = EXPR_BEG
931
+ Token("%").set_text("%")
932
+ end
933
+ end
934
+
935
+ @OP.def_rule('$') do #'
936
+ identify_gvar
937
+ end
938
+
939
+ @OP.def_rule('@') do
940
+ if peek(0) =~ /[@\w_]/
941
+ ungetc
942
+ identify_identifier
943
+ else
944
+ Token("@").set_text("@")
945
+ end
946
+ end
947
+
948
+ # @OP.def_rule("def", proc{|op, io| /\s/ =~ io.peek(0)}) do
949
+ # |op, io|
950
+ # @indent += 1
951
+ # @lex_state = EXPR_FNAME
952
+ # # @lex_state = EXPR_END
953
+ # # until @rests[0] == "\n" or @rests[0] == ";"
954
+ # # rests.shift
955
+ # # end
956
+ # end
957
+
958
+ @OP.def_rule("__END__", proc{@prev_char_no == 0 && peek(0) =~ /[\r\n]/}) do
959
+ throw :eof
960
+ end
961
+
962
+ @OP.def_rule("") do |op, io|
963
+ printf "MATCH: start %s: %s\n", op, io.inspect if RubyLex.debug?
964
+ if peek(0) =~ /[0-9]/
965
+ t = identify_number("")
966
+ elsif peek(0) =~ /[\w_]/
967
+ t = identify_identifier
968
+ end
969
+ printf "MATCH: end %s: %s\n", op, io.inspect if RubyLex.debug?
970
+ t
971
+ end
972
+
973
+ p @OP if RubyLex.debug?
974
+ end
975
+
976
+ def identify_gvar
977
+ @lex_state = EXPR_END
978
+ str = "$"
979
+
980
+ tk = case ch = getc
981
+ when /[~_*$?!@\/\\;,=:<>".]/ #"
982
+ str << ch
983
+ Token(TkGVAR, str)
984
+
985
+ when "-"
986
+ str << "-" << getc
987
+ Token(TkGVAR, str)
988
+
989
+ when "&", "`", "'", "+"
990
+ str << ch
991
+ Token(TkBACK_REF, str)
992
+
993
+ when /[1-9]/
994
+ str << ch
995
+ while (ch = getc) =~ /[0-9]/
996
+ str << ch
997
+ end
998
+ ungetc
999
+ Token(TkNTH_REF)
1000
+ when /\w/
1001
+ ungetc
1002
+ ungetc
1003
+ return identify_identifier
1004
+ else
1005
+ ungetc
1006
+ Token("$")
1007
+ end
1008
+ tk.set_text(str)
1009
+ end
1010
+
1011
+ def identify_identifier
1012
+ token = ""
1013
+ token.concat getc if peek(0) =~ /[$@]/
1014
+ token.concat getc if peek(0) == "@"
1015
+
1016
+ while (ch = getc) =~ /\w|_/
1017
+ print ":", ch, ":" if RubyLex.debug?
1018
+ token.concat ch
1019
+ end
1020
+ ungetc
1021
+
1022
+ if ch == "!" or ch == "?"
1023
+ token.concat getc
1024
+ end
1025
+ # fix token
1026
+
1027
+ # $stderr.puts "identifier - #{token}, state = #@lex_state"
1028
+
1029
+ case token
1030
+ when /^\$/
1031
+ return Token(TkGVAR, token).set_text(token)
1032
+ when /^\@/
1033
+ @lex_state = EXPR_END
1034
+ return Token(TkIVAR, token).set_text(token)
1035
+ end
1036
+
1037
+ if @lex_state != EXPR_DOT
1038
+ print token, "\n" if RubyLex.debug?
1039
+
1040
+ token_c, *trans = TkReading2Token[token]
1041
+ if token_c
1042
+ # reserved word?
1043
+
1044
+ if (@lex_state != EXPR_BEG &&
1045
+ @lex_state != EXPR_FNAME &&
1046
+ trans[1])
1047
+ # modifiers
1048
+ token_c = TkSymbol2Token[trans[1]]
1049
+ @lex_state = trans[0]
1050
+ else
1051
+ if @lex_state != EXPR_FNAME
1052
+ if ENINDENT_CLAUSE.include?(token)
1053
+ @indent += 1
1054
+
1055
+ if ACCEPTS_COLON.include?(token)
1056
+ @colonblock_seen = true
1057
+ else
1058
+ @colonblock_seen = false
1059
+ end
1060
+ elsif DEINDENT_CLAUSE.include?(token)
1061
+ @indent -= 1
1062
+ @colonblock_seen = false
1063
+ end
1064
+ @lex_state = trans[0]
1065
+ else
1066
+ @lex_state = EXPR_END
1067
+ end
1068
+ end
1069
+ return Token(token_c, token).set_text(token)
1070
+ end
1071
+ end
1072
+
1073
+ if @lex_state == EXPR_FNAME
1074
+ @lex_state = EXPR_END
1075
+ if peek(0) == '='
1076
+ token.concat getc
1077
+ end
1078
+ elsif @lex_state == EXPR_BEG || @lex_state == EXPR_DOT
1079
+ @lex_state = EXPR_ARG
1080
+ else
1081
+ @lex_state = EXPR_END
1082
+ end
1083
+
1084
+ if token[0, 1] =~ /[A-Z]/
1085
+ return Token(TkCONSTANT, token).set_text(token)
1086
+ elsif token[token.size - 1, 1] =~ /[!?]/
1087
+ return Token(TkFID, token).set_text(token)
1088
+ else
1089
+ return Token(TkIDENTIFIER, token).set_text(token)
1090
+ end
1091
+ end
1092
+
1093
+ def identify_here_document
1094
+ ch = getc
1095
+ if ch == "-"
1096
+ ch = getc
1097
+ indent = true
1098
+ end
1099
+ if /['"`]/ =~ ch # '
1100
+ lt = ch
1101
+ quoted = ""
1102
+ while (c = getc) && c != lt
1103
+ quoted.concat c
1104
+ end
1105
+ else
1106
+ lt = '"'
1107
+ quoted = ch.dup
1108
+ while (c = getc) && c =~ /\w/
1109
+ quoted.concat c
1110
+ end
1111
+ ungetc
1112
+ end
1113
+
1114
+ ltback, @ltype = @ltype, lt
1115
+ reserve = ""
1116
+
1117
+ while ch = getc
1118
+ reserve << ch
1119
+ if ch == "\\" #"
1120
+ ch = getc
1121
+ reserve << ch
1122
+ elsif ch == "\n"
1123
+ break
1124
+ end
1125
+ end
1126
+
1127
+ str = ""
1128
+ while (l = gets)
1129
+ l.chomp!
1130
+ l.strip! if indent
1131
+ break if l == quoted
1132
+ str << l.chomp << "\n"
1133
+ end
1134
+
1135
+ @reader.divert_read_from(reserve)
1136
+
1137
+ @ltype = ltback
1138
+ @lex_state = EXPR_END
1139
+ Token(Ltype2Token[lt], str).set_text(str.dump)
1140
+ end
1141
+
1142
+ def identify_quotation(initial_char)
1143
+ ch = getc
1144
+ if lt = PERCENT_LTYPE[ch]
1145
+ initial_char += ch
1146
+ ch = getc
1147
+ elsif ch =~ /\W/
1148
+ lt = "\""
1149
+ else
1150
+ # RubyLex.fail SyntaxError, "unknown type of %string ('#{ch}')"
1151
+ end
1152
+ # if ch !~ /\W/
1153
+ # ungetc
1154
+ # next
1155
+ # end
1156
+ # @ltype = lt
1157
+ @quoted = ch unless @quoted = PERCENT_PAREN[ch]
1158
+ identify_string(lt, @quoted, ch, initial_char) if lt
1159
+ end
1160
+
1161
+ def identify_number(start)
1162
+ str = start.dup
1163
+
1164
+ if start == "+" or start == "-" or start == ""
1165
+ start = getc
1166
+ str << start
1167
+ end
1168
+
1169
+ @lex_state = EXPR_END
1170
+
1171
+ if start == "0"
1172
+ if peek(0) == "x"
1173
+ ch = getc
1174
+ str << ch
1175
+ match = /[0-9a-f_]/
1176
+ else
1177
+ match = /[0-7_]/
1178
+ end
1179
+ while ch = getc
1180
+ if ch !~ match
1181
+ ungetc
1182
+ break
1183
+ else
1184
+ str << ch
1185
+ end
1186
+ end
1187
+ return Token(TkINTEGER).set_text(str)
1188
+ end
1189
+
1190
+ type = TkINTEGER
1191
+ allow_point = TRUE
1192
+ allow_e = TRUE
1193
+ while ch = getc
1194
+ case ch
1195
+ when /[0-9_]/
1196
+ str << ch
1197
+
1198
+ when allow_point && "."
1199
+ type = TkFLOAT
1200
+ if peek(0) !~ /[0-9]/
1201
+ ungetc
1202
+ break
1203
+ end
1204
+ str << ch
1205
+ allow_point = false
1206
+
1207
+ when allow_e && "e", allow_e && "E"
1208
+ str << ch
1209
+ type = TkFLOAT
1210
+ if peek(0) =~ /[+-]/
1211
+ str << getc
1212
+ end
1213
+ allow_e = false
1214
+ allow_point = false
1215
+ else
1216
+ ungetc
1217
+ break
1218
+ end
1219
+ end
1220
+ Token(type).set_text(str)
1221
+ end
1222
+
1223
+ def identify_string(ltype, quoted = ltype, opener=nil, initial_char = nil)
1224
+ @ltype = ltype
1225
+ @quoted = quoted
1226
+ subtype = nil
1227
+
1228
+ str = ""
1229
+ str << initial_char if initial_char
1230
+ str << (opener||quoted)
1231
+
1232
+ nest = 0
1233
+ begin
1234
+ while ch = getc
1235
+ str << ch
1236
+ if @quoted == ch
1237
+ if nest == 0
1238
+ break
1239
+ else
1240
+ nest -= 1
1241
+ end
1242
+ elsif opener == ch
1243
+ nest += 1
1244
+ elsif @ltype != "'" && @ltype != "]" and ch == "#"
1245
+ ch = getc
1246
+ if ch == "{"
1247
+ subtype = true
1248
+ str << ch << skip_inner_expression
1249
+ else
1250
+ ungetc(ch)
1251
+ end
1252
+ elsif ch == '\\' #'
1253
+ str << read_escape
1254
+ end
1255
+ end
1256
+ if @ltype == "/"
1257
+ if peek(0) =~ /i|o|n|e|s/
1258
+ str << getc
1259
+ end
1260
+ end
1261
+ if subtype
1262
+ Token(DLtype2Token[ltype], str)
1263
+ else
1264
+ Token(Ltype2Token[ltype], str)
1265
+ end.set_text(str)
1266
+ ensure
1267
+ @ltype = nil
1268
+ @quoted = nil
1269
+ @lex_state = EXPR_END
1270
+ end
1271
+ end
1272
+
1273
+ def skip_inner_expression
1274
+ res = ""
1275
+ nest = 0
1276
+ while (ch = getc)
1277
+ res << ch
1278
+ if ch == '}'
1279
+ break if nest.zero?
1280
+ nest -= 1
1281
+ elsif ch == '{'
1282
+ nest += 1
1283
+ end
1284
+ end
1285
+ res
1286
+ end
1287
+
1288
+ def identify_comment
1289
+ @ltype = "#"
1290
+ comment = "#"
1291
+ while ch = getc
1292
+ if ch == "\\"
1293
+ ch = getc
1294
+ if ch == "\n"
1295
+ ch = " "
1296
+ else
1297
+ comment << "\\"
1298
+ end
1299
+ else
1300
+ if ch == "\n"
1301
+ @ltype = nil
1302
+ ungetc
1303
+ break
1304
+ end
1305
+ end
1306
+ comment << ch
1307
+ end
1308
+ return Token(TkCOMMENT).set_text(comment)
1309
+ end
1310
+
1311
+ def read_escape
1312
+ res = ""
1313
+ case ch = getc
1314
+ when /[0-7]/
1315
+ ungetc ch
1316
+ 3.times do
1317
+ case ch = getc
1318
+ when /[0-7]/
1319
+ when nil
1320
+ break
1321
+ else
1322
+ ungetc
1323
+ break
1324
+ end
1325
+ res << ch
1326
+ end
1327
+
1328
+ when "x"
1329
+ res << ch
1330
+ 2.times do
1331
+ case ch = getc
1332
+ when /[0-9a-fA-F]/
1333
+ when nil
1334
+ break
1335
+ else
1336
+ ungetc
1337
+ break
1338
+ end
1339
+ res << ch
1340
+ end
1341
+
1342
+ when "M"
1343
+ res << ch
1344
+ if (ch = getc) != '-'
1345
+ ungetc
1346
+ else
1347
+ res << ch
1348
+ if (ch = getc) == "\\" #"
1349
+ res << ch
1350
+ res << read_escape
1351
+ else
1352
+ res << ch
1353
+ end
1354
+ end
1355
+
1356
+ when "C", "c" #, "^"
1357
+ res << ch
1358
+ if ch == "C" and (ch = getc) != "-"
1359
+ ungetc
1360
+ else
1361
+ res << ch
1362
+ if (ch = getc) == "\\" #"
1363
+ res << ch
1364
+ res << read_escape
1365
+ else
1366
+ res << ch
1367
+ end
1368
+ end
1369
+ else
1370
+ res << ch
1371
+ end
1372
+ res
1373
+ end
1374
+ end
1375
+ end
1376
+ end