chess_engine 0.0.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 (292) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +5 -0
  3. data/Gemfile.lock +21 -0
  4. data/README.md +26 -0
  5. data/chess_engine.gemspec +14 -0
  6. data/lib/chess_engine/board.rb +95 -0
  7. data/lib/chess_engine/cli.rb +105 -0
  8. data/lib/chess_engine/game.rb +148 -0
  9. data/lib/chess_engine/input.rb +19 -0
  10. data/lib/chess_engine/move.rb +35 -0
  11. data/lib/chess_engine/piece.rb +97 -0
  12. data/lib/chess_engine/validator.rb +87 -0
  13. data/lib/chess_engine.rb +1 -0
  14. data/spec/board_spec.rb +70 -0
  15. data/spec/game_helper.rb +5 -0
  16. data/spec/game_spec.rb +79 -0
  17. data/spec/spec_helper.rb +100 -0
  18. data/spec/validator_spec.rb +26 -0
  19. data/vendor/bundle/bin/coderay +27 -0
  20. data/vendor/bundle/bin/pry +27 -0
  21. data/vendor/bundle/cache/coderay-1.1.2.gem +0 -0
  22. data/vendor/bundle/cache/colorize-0.8.1.gem +0 -0
  23. data/vendor/bundle/cache/method_source-0.9.2.gem +0 -0
  24. data/vendor/bundle/cache/pry-0.12.2.gem +0 -0
  25. data/vendor/bundle/cache/rb-readline-0.5.5.gem +0 -0
  26. data/vendor/bundle/gems/coderay-1.1.2/MIT-LICENSE +22 -0
  27. data/vendor/bundle/gems/coderay-1.1.2/README_INDEX.rdoc +123 -0
  28. data/vendor/bundle/gems/coderay-1.1.2/bin/coderay +215 -0
  29. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/duo.rb +81 -0
  30. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/_map.rb +17 -0
  31. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/comment_filter.rb +25 -0
  32. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/count.rb +39 -0
  33. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/debug.rb +49 -0
  34. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/debug_lint.rb +63 -0
  35. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/div.rb +23 -0
  36. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/encoder.rb +190 -0
  37. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/filter.rb +58 -0
  38. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/html/css.rb +65 -0
  39. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/html/numbering.rb +108 -0
  40. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/html/output.rb +166 -0
  41. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/html.rb +333 -0
  42. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/json.rb +83 -0
  43. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/lines_of_code.rb +45 -0
  44. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/lint.rb +59 -0
  45. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/null.rb +18 -0
  46. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/page.rb +24 -0
  47. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/span.rb +23 -0
  48. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/statistic.rb +95 -0
  49. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/terminal.rb +195 -0
  50. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/text.rb +46 -0
  51. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/token_kind_filter.rb +111 -0
  52. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/xml.rb +72 -0
  53. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/yaml.rb +50 -0
  54. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders.rb +18 -0
  55. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/for_redcloth.rb +95 -0
  56. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/helpers/file_type.rb +151 -0
  57. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/helpers/plugin.rb +55 -0
  58. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/helpers/plugin_host.rb +221 -0
  59. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/helpers/word_list.rb +72 -0
  60. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/_map.rb +24 -0
  61. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/c.rb +189 -0
  62. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/clojure.rb +217 -0
  63. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/cpp.rb +217 -0
  64. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/css.rb +196 -0
  65. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/debug.rb +75 -0
  66. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/delphi.rb +144 -0
  67. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/diff.rb +221 -0
  68. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/erb.rb +81 -0
  69. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/go.rb +208 -0
  70. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/groovy.rb +268 -0
  71. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/haml.rb +168 -0
  72. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/html.rb +275 -0
  73. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/java/builtin_types.rb +421 -0
  74. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/java.rb +174 -0
  75. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/java_script.rb +237 -0
  76. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/json.rb +98 -0
  77. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/lua.rb +280 -0
  78. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/php.rb +527 -0
  79. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/python.rb +287 -0
  80. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/raydebug.rb +75 -0
  81. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/ruby/patterns.rb +178 -0
  82. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/ruby/string_state.rb +79 -0
  83. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/ruby.rb +477 -0
  84. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/sass.rb +232 -0
  85. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/scanner.rb +337 -0
  86. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/sql.rb +169 -0
  87. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/taskpaper.rb +36 -0
  88. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/text.rb +26 -0
  89. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/xml.rb +17 -0
  90. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/yaml.rb +140 -0
  91. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners.rb +27 -0
  92. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/styles/_map.rb +7 -0
  93. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/styles/alpha.rb +153 -0
  94. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/styles/style.rb +18 -0
  95. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/styles.rb +15 -0
  96. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/token_kinds.rb +85 -0
  97. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/tokens.rb +161 -0
  98. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/tokens_proxy.rb +55 -0
  99. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/version.rb +3 -0
  100. data/vendor/bundle/gems/coderay-1.1.2/lib/coderay.rb +284 -0
  101. data/vendor/bundle/gems/colorize-0.8.1/CHANGELOG +65 -0
  102. data/vendor/bundle/gems/colorize-0.8.1/LICENSE +339 -0
  103. data/vendor/bundle/gems/colorize-0.8.1/README.md +105 -0
  104. data/vendor/bundle/gems/colorize-0.8.1/Rakefile +13 -0
  105. data/vendor/bundle/gems/colorize-0.8.1/colorize.gemspec +36 -0
  106. data/vendor/bundle/gems/colorize-0.8.1/lib/colorize/class_methods.rb +120 -0
  107. data/vendor/bundle/gems/colorize-0.8.1/lib/colorize/instance_methods.rb +132 -0
  108. data/vendor/bundle/gems/colorize-0.8.1/lib/colorize.rb +12 -0
  109. data/vendor/bundle/gems/colorize-0.8.1/lib/colorized_string.rb +19 -0
  110. data/vendor/bundle/gems/colorize-0.8.1/test/test_colorize.rb +164 -0
  111. data/vendor/bundle/gems/method_source-0.9.2/Gemfile +2 -0
  112. data/vendor/bundle/gems/method_source-0.9.2/LICENSE +25 -0
  113. data/vendor/bundle/gems/method_source-0.9.2/README.markdown +91 -0
  114. data/vendor/bundle/gems/method_source-0.9.2/Rakefile +81 -0
  115. data/vendor/bundle/gems/method_source-0.9.2/lib/method_source/code_helpers.rb +154 -0
  116. data/vendor/bundle/gems/method_source-0.9.2/lib/method_source/source_location.rb +138 -0
  117. data/vendor/bundle/gems/method_source-0.9.2/lib/method_source/version.rb +3 -0
  118. data/vendor/bundle/gems/method_source-0.9.2/lib/method_source.rb +141 -0
  119. data/vendor/bundle/gems/method_source-0.9.2/method_source.gemspec +35 -0
  120. data/vendor/bundle/gems/method_source-0.9.2/spec/method_source/code_helpers_spec.rb +43 -0
  121. data/vendor/bundle/gems/method_source-0.9.2/spec/method_source_spec.rb +143 -0
  122. data/vendor/bundle/gems/method_source-0.9.2/spec/spec_helper.rb +101 -0
  123. data/vendor/bundle/gems/pry-0.12.2/CHANGELOG.md +953 -0
  124. data/vendor/bundle/gems/pry-0.12.2/LICENSE +25 -0
  125. data/vendor/bundle/gems/pry-0.12.2/README.md +390 -0
  126. data/vendor/bundle/gems/pry-0.12.2/bin/pry +8 -0
  127. data/vendor/bundle/gems/pry-0.12.2/lib/pry/basic_object.rb +6 -0
  128. data/vendor/bundle/gems/pry-0.12.2/lib/pry/cli.rb +218 -0
  129. data/vendor/bundle/gems/pry-0.12.2/lib/pry/code/code_file.rb +110 -0
  130. data/vendor/bundle/gems/pry-0.12.2/lib/pry/code/code_range.rb +71 -0
  131. data/vendor/bundle/gems/pry-0.12.2/lib/pry/code/loc.rb +98 -0
  132. data/vendor/bundle/gems/pry-0.12.2/lib/pry/code.rb +353 -0
  133. data/vendor/bundle/gems/pry-0.12.2/lib/pry/code_object.rb +195 -0
  134. data/vendor/bundle/gems/pry-0.12.2/lib/pry/color_printer.rb +65 -0
  135. data/vendor/bundle/gems/pry-0.12.2/lib/pry/command.rb +723 -0
  136. data/vendor/bundle/gems/pry-0.12.2/lib/pry/command_set.rb +415 -0
  137. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/amend_line.rb +98 -0
  138. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/bang.rb +20 -0
  139. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/bang_pry.rb +17 -0
  140. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat/abstract_formatter.rb +27 -0
  141. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat/exception_formatter.rb +79 -0
  142. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat/file_formatter.rb +71 -0
  143. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
  144. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat.rb +63 -0
  145. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cd.rb +41 -0
  146. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/change_inspector.rb +27 -0
  147. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/change_prompt.rb +46 -0
  148. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/clear_screen.rb +14 -0
  149. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/code_collector.rb +167 -0
  150. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/disable_pry.rb +27 -0
  151. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/disabled_commands.rb +2 -0
  152. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/easter_eggs.rb +112 -0
  153. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/edit/exception_patcher.rb +25 -0
  154. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/edit/file_and_line_locator.rb +36 -0
  155. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/edit.rb +200 -0
  156. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/exit.rb +43 -0
  157. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/exit_all.rb +29 -0
  158. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/exit_program.rb +23 -0
  159. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/find_method.rb +191 -0
  160. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/fix_indent.rb +19 -0
  161. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_cd.rb +26 -0
  162. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_install.rb +32 -0
  163. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_list.rb +33 -0
  164. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_open.rb +29 -0
  165. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_readme.rb +25 -0
  166. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_search.rb +40 -0
  167. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_stats.rb +83 -0
  168. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gist.rb +102 -0
  169. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/help.rb +164 -0
  170. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/hist.rb +181 -0
  171. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/import_set.rb +23 -0
  172. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/install_command.rb +54 -0
  173. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/jump_to.rb +29 -0
  174. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/list_inspectors.rb +35 -0
  175. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/constants.rb +58 -0
  176. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/formatter.rb +51 -0
  177. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/globals.rb +46 -0
  178. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/grep.rb +19 -0
  179. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/instance_vars.rb +38 -0
  180. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/interrogatable.rb +18 -0
  181. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/jruby_hacks.rb +49 -0
  182. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/local_names.rb +33 -0
  183. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/local_vars.rb +37 -0
  184. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/ls_entity.rb +69 -0
  185. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/methods.rb +54 -0
  186. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/methods_helper.rb +46 -0
  187. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/self_methods.rb +33 -0
  188. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls.rb +113 -0
  189. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/nesting.rb +25 -0
  190. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/play.rb +102 -0
  191. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/pry_backtrace.rb +25 -0
  192. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/pry_version.rb +17 -0
  193. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/raise_up.rb +33 -0
  194. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/reload_code.rb +62 -0
  195. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/reset.rb +18 -0
  196. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ri.rb +65 -0
  197. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/save_file.rb +61 -0
  198. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/shell_command.rb +75 -0
  199. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/shell_mode.rb +25 -0
  200. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/show_doc.rb +81 -0
  201. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/show_info.rb +216 -0
  202. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/show_input.rb +17 -0
  203. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/show_source.rb +53 -0
  204. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/stat.rb +40 -0
  205. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/switch_to.rb +23 -0
  206. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/toggle_color.rb +24 -0
  207. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/watch_expression/expression.rb +38 -0
  208. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/watch_expression.rb +107 -0
  209. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/whereami.rb +197 -0
  210. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/wtf.rb +70 -0
  211. data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands.rb +6 -0
  212. data/vendor/bundle/gems/pry-0.12.2/lib/pry/config/behavior.rb +255 -0
  213. data/vendor/bundle/gems/pry-0.12.2/lib/pry/config/convenience.rb +28 -0
  214. data/vendor/bundle/gems/pry-0.12.2/lib/pry/config/default.rb +159 -0
  215. data/vendor/bundle/gems/pry-0.12.2/lib/pry/config/memoization.rb +48 -0
  216. data/vendor/bundle/gems/pry-0.12.2/lib/pry/config.rb +35 -0
  217. data/vendor/bundle/gems/pry-0.12.2/lib/pry/core_extensions.rb +142 -0
  218. data/vendor/bundle/gems/pry-0.12.2/lib/pry/editor.rb +128 -0
  219. data/vendor/bundle/gems/pry-0.12.2/lib/pry/exceptions.rb +76 -0
  220. data/vendor/bundle/gems/pry-0.12.2/lib/pry/forwardable.rb +23 -0
  221. data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/base_helpers.rb +200 -0
  222. data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/command_helpers.rb +157 -0
  223. data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/documentation_helpers.rb +76 -0
  224. data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/options_helpers.rb +27 -0
  225. data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/platform.rb +58 -0
  226. data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/table.rb +114 -0
  227. data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/text.rb +115 -0
  228. data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers.rb +6 -0
  229. data/vendor/bundle/gems/pry-0.12.2/lib/pry/history.rb +161 -0
  230. data/vendor/bundle/gems/pry-0.12.2/lib/pry/hooks.rb +171 -0
  231. data/vendor/bundle/gems/pry-0.12.2/lib/pry/indent.rb +408 -0
  232. data/vendor/bundle/gems/pry-0.12.2/lib/pry/input_completer.rb +265 -0
  233. data/vendor/bundle/gems/pry-0.12.2/lib/pry/input_lock.rb +130 -0
  234. data/vendor/bundle/gems/pry-0.12.2/lib/pry/inspector.rb +27 -0
  235. data/vendor/bundle/gems/pry-0.12.2/lib/pry/last_exception.rb +61 -0
  236. data/vendor/bundle/gems/pry-0.12.2/lib/pry/method/disowned.rb +55 -0
  237. data/vendor/bundle/gems/pry-0.12.2/lib/pry/method/patcher.rb +122 -0
  238. data/vendor/bundle/gems/pry-0.12.2/lib/pry/method/weird_method_locator.rb +198 -0
  239. data/vendor/bundle/gems/pry-0.12.2/lib/pry/method.rb +552 -0
  240. data/vendor/bundle/gems/pry-0.12.2/lib/pry/object_path.rb +83 -0
  241. data/vendor/bundle/gems/pry-0.12.2/lib/pry/output.rb +50 -0
  242. data/vendor/bundle/gems/pry-0.12.2/lib/pry/pager.rb +250 -0
  243. data/vendor/bundle/gems/pry-0.12.2/lib/pry/platform.rb +91 -0
  244. data/vendor/bundle/gems/pry-0.12.2/lib/pry/plugins.rb +122 -0
  245. data/vendor/bundle/gems/pry-0.12.2/lib/pry/prompt.rb +145 -0
  246. data/vendor/bundle/gems/pry-0.12.2/lib/pry/pry_class.rb +425 -0
  247. data/vendor/bundle/gems/pry-0.12.2/lib/pry/pry_instance.rb +699 -0
  248. data/vendor/bundle/gems/pry-0.12.2/lib/pry/repl.rb +261 -0
  249. data/vendor/bundle/gems/pry-0.12.2/lib/pry/repl_file_loader.rb +73 -0
  250. data/vendor/bundle/gems/pry-0.12.2/lib/pry/ring.rb +84 -0
  251. data/vendor/bundle/gems/pry-0.12.2/lib/pry/rubygem.rb +84 -0
  252. data/vendor/bundle/gems/pry-0.12.2/lib/pry/slop/LICENSE +20 -0
  253. data/vendor/bundle/gems/pry-0.12.2/lib/pry/slop/commands.rb +195 -0
  254. data/vendor/bundle/gems/pry-0.12.2/lib/pry/slop/option.rb +206 -0
  255. data/vendor/bundle/gems/pry-0.12.2/lib/pry/slop.rb +661 -0
  256. data/vendor/bundle/gems/pry-0.12.2/lib/pry/terminal.rb +91 -0
  257. data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/evalable.rb +15 -0
  258. data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/mockable.rb +14 -0
  259. data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/pry_tester.rb +73 -0
  260. data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/utility.rb +26 -0
  261. data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/variables.rb +46 -0
  262. data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable.rb +70 -0
  263. data/vendor/bundle/gems/pry-0.12.2/lib/pry/version.rb +3 -0
  264. data/vendor/bundle/gems/pry-0.12.2/lib/pry/wrapped_module/candidate.rb +131 -0
  265. data/vendor/bundle/gems/pry-0.12.2/lib/pry/wrapped_module.rb +378 -0
  266. data/vendor/bundle/gems/pry-0.12.2/lib/pry.rb +132 -0
  267. data/vendor/bundle/gems/rb-readline-0.5.5/CHANGES +94 -0
  268. data/vendor/bundle/gems/rb-readline-0.5.5/LICENSE +25 -0
  269. data/vendor/bundle/gems/rb-readline-0.5.5/README.md +81 -0
  270. data/vendor/bundle/gems/rb-readline-0.5.5/Rakefile +25 -0
  271. data/vendor/bundle/gems/rb-readline-0.5.5/bench/_rl_adjust_point.rb +26 -0
  272. data/vendor/bundle/gems/rb-readline-0.5.5/examples/example_readline.rb +8 -0
  273. data/vendor/bundle/gems/rb-readline-0.5.5/examples/example_readline_with_completion.rb +18 -0
  274. data/vendor/bundle/gems/rb-readline-0.5.5/examples/tinyirb.rb +11 -0
  275. data/vendor/bundle/gems/rb-readline-0.5.5/lib/rb-readline.rb +18 -0
  276. data/vendor/bundle/gems/rb-readline-0.5.5/lib/rbreadline/version.rb +3 -0
  277. data/vendor/bundle/gems/rb-readline-0.5.5/lib/rbreadline.rb +8920 -0
  278. data/vendor/bundle/gems/rb-readline-0.5.5/lib/readline.rb +539 -0
  279. data/vendor/bundle/gems/rb-readline-0.5.5/rb-readline.gemspec +51 -0
  280. data/vendor/bundle/gems/rb-readline-0.5.5/setup.rb +1585 -0
  281. data/vendor/bundle/gems/rb-readline-0.5.5/test/support/filesystem_completion_helper.rb +53 -0
  282. data/vendor/bundle/gems/rb-readline-0.5.5/test/test_completion.rb +100 -0
  283. data/vendor/bundle/gems/rb-readline-0.5.5/test/test_filename_completion_proc.rb +88 -0
  284. data/vendor/bundle/gems/rb-readline-0.5.5/test/test_history.rb +29 -0
  285. data/vendor/bundle/gems/rb-readline-0.5.5/test/test_rbreadline.rb +23 -0
  286. data/vendor/bundle/gems/rb-readline-0.5.5/test/test_readline.rb +221 -0
  287. data/vendor/bundle/specifications/coderay-1.1.2.gemspec +26 -0
  288. data/vendor/bundle/specifications/colorize-0.8.1.gemspec +38 -0
  289. data/vendor/bundle/specifications/method_source-0.9.2.gemspec +35 -0
  290. data/vendor/bundle/specifications/pry-0.12.2.gemspec +38 -0
  291. data/vendor/bundle/specifications/rb-readline-0.5.5.gemspec +39 -0
  292. metadata +363 -0
@@ -0,0 +1,79 @@
1
+ # encoding: utf-8
2
+ module CodeRay
3
+ module Scanners
4
+
5
+ class Ruby
6
+
7
+ class StringState < Struct.new :type, :interpreted, :delim, :heredoc,
8
+ :opening_paren, :paren_depth, :pattern, :next_state # :nodoc: all
9
+
10
+ CLOSING_PAREN = Hash[ *%w[
11
+ ( )
12
+ [ ]
13
+ < >
14
+ { }
15
+ ] ].each { |k,v| k.freeze; v.freeze } # debug, if I try to change it with <<
16
+
17
+ STRING_PATTERN = Hash.new do |h, k|
18
+ delim, interpreted = *k
19
+ delim_pattern = Regexp.escape(delim)
20
+ if closing_paren = CLOSING_PAREN[delim]
21
+ delim_pattern << Regexp.escape(closing_paren)
22
+ end
23
+ delim_pattern << '\\\\' unless delim == '\\'
24
+
25
+ # special_escapes =
26
+ # case interpreted
27
+ # when :regexp_symbols
28
+ # '| [|?*+(){}\[\].^$]'
29
+ # end
30
+
31
+ if interpreted && delim != '#'
32
+ / (?= [#{delim_pattern}] | \# [{$@] ) /mx
33
+ else
34
+ / (?= [#{delim_pattern}] ) /mx
35
+ end.tap do |pattern|
36
+ h[k] = pattern if (delim.respond_to?(:ord) ? delim.ord : delim[0]) < 256
37
+ end
38
+ end
39
+
40
+ def self.simple_key_pattern delim
41
+ if delim == "'"
42
+ / (?> (?: [^\\']+ | \\. )* ) ' : /mx
43
+ else
44
+ / (?> (?: [^\\"\#]+ | \\. | \#\$[\\"] | \#\{[^\{\}]+\} | \#(?!\{) )* ) " : /mx
45
+ end
46
+ end
47
+
48
+ def initialize kind, interpreted, delim, heredoc = false
49
+ if heredoc
50
+ pattern = heredoc_pattern delim, interpreted, heredoc == :indented
51
+ delim = nil
52
+ else
53
+ pattern = STRING_PATTERN[ [delim, interpreted] ]
54
+ if closing_paren = CLOSING_PAREN[delim]
55
+ opening_paren = delim
56
+ delim = closing_paren
57
+ paren_depth = 1
58
+ end
59
+ end
60
+ super kind, interpreted, delim, heredoc, opening_paren, paren_depth, pattern, :initial
61
+ end
62
+
63
+ def heredoc_pattern delim, interpreted, indented
64
+ # delim = delim.dup # workaround for old Ruby
65
+ delim_pattern = Regexp.escape(delim)
66
+ delim_pattern = / (?:\A|\n) #{ '(?>[ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x
67
+ if interpreted
68
+ / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx # $1 set == end of heredoc
69
+ else
70
+ / (?= #{delim_pattern}() | \\ ) /mx
71
+ end
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+ end
@@ -0,0 +1,477 @@
1
+ module CodeRay
2
+ module Scanners
3
+
4
+ # This scanner is really complex, since Ruby _is_ a complex language!
5
+ #
6
+ # It tries to highlight 100% of all common code,
7
+ # and 90% of strange codes.
8
+ #
9
+ # It is optimized for HTML highlighting, and is not very useful for
10
+ # parsing or pretty printing.
11
+ class Ruby < Scanner
12
+
13
+ register_for :ruby
14
+ file_extension 'rb'
15
+
16
+ autoload :Patterns, CodeRay.coderay_path('scanners', 'ruby', 'patterns')
17
+ autoload :StringState, CodeRay.coderay_path('scanners', 'ruby', 'string_state')
18
+
19
+ def interpreted_string_state
20
+ StringState.new :string, true, '"'
21
+ end
22
+
23
+ protected
24
+
25
+ def setup
26
+ @state = :initial
27
+ end
28
+
29
+ def scan_tokens encoder, options
30
+ state, heredocs = options[:state] || @state
31
+ heredocs = heredocs.dup if heredocs.is_a?(Array)
32
+
33
+ if state && state.instance_of?(StringState)
34
+ encoder.begin_group state.type
35
+ end
36
+
37
+ last_state = nil
38
+
39
+ method_call_expected = false
40
+ value_expected = true
41
+
42
+ inline_block_stack = nil
43
+ inline_block_curly_depth = 0
44
+
45
+ if heredocs
46
+ state = heredocs.shift
47
+ encoder.begin_group state.type
48
+ heredocs = nil if heredocs.empty?
49
+ end
50
+
51
+ # def_object_stack = nil
52
+ # def_object_paren_depth = 0
53
+
54
+ patterns = Patterns # avoid constant lookup
55
+
56
+ unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8'
57
+
58
+ until eos?
59
+
60
+ if state.instance_of? ::Symbol
61
+
62
+ if match = scan(/[ \t\f\v]+/)
63
+ encoder.text_token match, :space
64
+
65
+ elsif match = scan(/\n/)
66
+ if heredocs
67
+ unscan # heredoc scanning needs \n at start
68
+ state = heredocs.shift
69
+ encoder.begin_group state.type
70
+ heredocs = nil if heredocs.empty?
71
+ else
72
+ state = :initial if state == :undef_comma_expected
73
+ encoder.text_token match, :space
74
+ value_expected = true
75
+ end
76
+
77
+ elsif match = scan(bol? ? / \#(!)?.* | #{patterns::RUBYDOC_OR_DATA} /ox : /\#.*/)
78
+ encoder.text_token match, self[1] ? :doctype : :comment
79
+
80
+ elsif match = scan(/\\\n/)
81
+ if heredocs
82
+ unscan # heredoc scanning needs \n at start
83
+ encoder.text_token scan(/\\/), :space
84
+ state = heredocs.shift
85
+ encoder.begin_group state.type
86
+ heredocs = nil if heredocs.empty?
87
+ else
88
+ encoder.text_token match, :space
89
+ end
90
+
91
+ elsif state == :initial
92
+
93
+ # IDENTS #
94
+ if !method_call_expected &&
95
+ match = scan(unicode ? /#{patterns::METHOD_NAME}/uo :
96
+ /#{patterns::METHOD_NAME}/o)
97
+
98
+ kind = patterns::IDENT_KIND[match]
99
+ if value_expected != :colon_expected && scan(/:(?!:)/)
100
+ value_expected = true
101
+ encoder.text_token match, :key
102
+ encoder.text_token ':', :operator
103
+ else
104
+ value_expected = false
105
+ if kind == :ident
106
+ if match[/\A[A-Z]/] && !(match[/[!?]$/] || match?(/\(/))
107
+ kind = :constant
108
+ end
109
+ elsif kind == :keyword
110
+ state = patterns::KEYWORD_NEW_STATE[match]
111
+ if patterns::KEYWORDS_EXPECTING_VALUE[match]
112
+ value_expected = match == 'when' ? :colon_expected : true
113
+ end
114
+ end
115
+ value_expected = true if !value_expected && check(/#{patterns::VALUE_FOLLOWS}/o)
116
+ encoder.text_token match, kind
117
+ end
118
+
119
+ elsif method_call_expected &&
120
+ match = scan(unicode ? /#{patterns::METHOD_AFTER_DOT}/uo :
121
+ /#{patterns::METHOD_AFTER_DOT}/o)
122
+ if method_call_expected == '::' && match[/\A[A-Z]/] && !match?(/\(/)
123
+ encoder.text_token match, :constant
124
+ else
125
+ encoder.text_token match, :ident
126
+ end
127
+ method_call_expected = false
128
+ value_expected = check(/#{patterns::VALUE_FOLLOWS}/o)
129
+
130
+ # OPERATORS #
131
+ elsif !method_call_expected && match = scan(/ (\.(?!\.)|::) | ( \.\.\.? | ==?=? | [,\(\[\{] ) | [\)\]\}] /x)
132
+ method_call_expected = self[1]
133
+ value_expected = !method_call_expected && !!self[2]
134
+ if inline_block_stack
135
+ case match
136
+ when '{'
137
+ inline_block_curly_depth += 1
138
+ when '}'
139
+ inline_block_curly_depth -= 1
140
+ if inline_block_curly_depth == 0 # closing brace of inline block reached
141
+ state, inline_block_curly_depth, heredocs = inline_block_stack.pop
142
+ inline_block_stack = nil if inline_block_stack.empty?
143
+ heredocs = nil if heredocs && heredocs.empty?
144
+ encoder.text_token match, :inline_delimiter
145
+ encoder.end_group :inline
146
+ next
147
+ end
148
+ end
149
+ end
150
+ encoder.text_token match, :operator
151
+
152
+ elsif match = scan(unicode ? /#{patterns::SYMBOL}/uo :
153
+ /#{patterns::SYMBOL}/o)
154
+ case delim = match[1]
155
+ when ?', ?"
156
+ encoder.begin_group :symbol
157
+ encoder.text_token ':', :symbol
158
+ match = delim.chr
159
+ encoder.text_token match, :delimiter
160
+ state = self.class::StringState.new :symbol, delim == ?", match
161
+ else
162
+ encoder.text_token match, :symbol
163
+ value_expected = false
164
+ end
165
+
166
+ elsif match = scan(/ ' (?:(?>[^'\\]*) ')? | " (?:(?>[^"\\\#]*) ")? /mx)
167
+ if match.size == 1
168
+ kind = check(self.class::StringState.simple_key_pattern(match)) ? :key : :string
169
+ encoder.begin_group kind
170
+ encoder.text_token match, :delimiter
171
+ state = self.class::StringState.new kind, match == '"', match # important for streaming
172
+ else
173
+ kind = value_expected == true && scan(/:/) ? :key : :string
174
+ encoder.begin_group kind
175
+ encoder.text_token match[0,1], :delimiter
176
+ encoder.text_token match[1..-2], :content if match.size > 2
177
+ encoder.text_token match[-1,1], :delimiter
178
+ encoder.end_group kind
179
+ encoder.text_token ':', :operator if kind == :key
180
+ value_expected = false
181
+ end
182
+
183
+ elsif match = scan(unicode ? /#{patterns::INSTANCE_VARIABLE}/uo :
184
+ /#{patterns::INSTANCE_VARIABLE}/o)
185
+ value_expected = false
186
+ encoder.text_token match, :instance_variable
187
+
188
+ elsif value_expected && match = scan(/\//)
189
+ encoder.begin_group :regexp
190
+ encoder.text_token match, :delimiter
191
+ state = self.class::StringState.new :regexp, true, '/'
192
+
193
+ elsif match = scan(value_expected ? /[-+]?#{patterns::NUMERIC}/o : /#{patterns::NUMERIC}/o)
194
+ if method_call_expected
195
+ encoder.text_token match, :error
196
+ method_call_expected = false
197
+ else
198
+ kind = self[1] ? :float : :integer # TODO: send :hex/:octal/:binary
199
+ match << 'r' if match !~ /e/i && scan(/r/)
200
+ match << 'i' if scan(/i/)
201
+ encoder.text_token match, kind
202
+ end
203
+ value_expected = false
204
+
205
+ elsif match = scan(/ [-+!~^\/]=? | [:;] | &\. | [*|&]{1,2}=? | >>? /x)
206
+ value_expected = true
207
+ encoder.text_token match, :operator
208
+
209
+ elsif value_expected && match = scan(/#{patterns::HEREDOC_OPEN}/o)
210
+ quote = self[3]
211
+ delim = self[quote ? 4 : 2]
212
+ kind = patterns::QUOTE_TO_TYPE[quote]
213
+ encoder.begin_group kind
214
+ encoder.text_token match, :delimiter
215
+ encoder.end_group kind
216
+ heredocs ||= [] # create heredocs if empty
217
+ heredocs << self.class::StringState.new(kind, quote != "'", delim,
218
+ self[1] ? :indented : :linestart)
219
+ value_expected = false
220
+
221
+ elsif value_expected && match = scan(/#{patterns::FANCY_STRING_START}/o)
222
+ kind = patterns::FANCY_STRING_KIND[self[1]]
223
+ encoder.begin_group kind
224
+ state = self.class::StringState.new kind, patterns::FANCY_STRING_INTERPRETED[self[1]], self[2]
225
+ encoder.text_token match, :delimiter
226
+
227
+ elsif value_expected && match = scan(/#{patterns::CHARACTER}/o)
228
+ value_expected = false
229
+ encoder.text_token match, :integer
230
+
231
+ elsif match = scan(/ %=? | <(?:<|=>?)? | \? /x)
232
+ value_expected = match == '?' ? :colon_expected : true
233
+ encoder.text_token match, :operator
234
+
235
+ elsif match = scan(/`/)
236
+ encoder.begin_group :shell
237
+ encoder.text_token match, :delimiter
238
+ state = self.class::StringState.new :shell, true, match
239
+
240
+ elsif match = scan(unicode ? /#{patterns::GLOBAL_VARIABLE}/uo :
241
+ /#{patterns::GLOBAL_VARIABLE}/o)
242
+ encoder.text_token match, :global_variable
243
+ value_expected = false
244
+
245
+ elsif match = scan(unicode ? /#{patterns::CLASS_VARIABLE}/uo :
246
+ /#{patterns::CLASS_VARIABLE}/o)
247
+ encoder.text_token match, :class_variable
248
+ value_expected = false
249
+
250
+ elsif match = scan(/\\\z/)
251
+ encoder.text_token match, :space
252
+
253
+ else
254
+ if method_call_expected
255
+ method_call_expected = false
256
+ next
257
+ end
258
+ unless unicode
259
+ # check for unicode
260
+ $DEBUG_BEFORE, $DEBUG = $DEBUG, false
261
+ begin
262
+ if check(/./mu).size > 1
263
+ # seems like we should try again with unicode
264
+ unicode = true
265
+ end
266
+ rescue
267
+ # bad unicode char; use getch
268
+ ensure
269
+ $DEBUG = $DEBUG_BEFORE
270
+ end
271
+ next if unicode
272
+ end
273
+
274
+ encoder.text_token getch, :error
275
+
276
+ end
277
+
278
+ if last_state
279
+ state = last_state unless state.is_a?(StringState) # otherwise, a simple 'def"' results in unclosed tokens
280
+ last_state = nil
281
+ end
282
+
283
+ elsif state == :def_expected
284
+ if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo :
285
+ /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o)
286
+ encoder.text_token match, :method
287
+ state = :initial
288
+ else
289
+ last_state = :dot_expected
290
+ state = :initial
291
+ end
292
+
293
+ elsif state == :dot_expected
294
+ if match = scan(/\.|::/)
295
+ # invalid definition
296
+ state = :def_expected
297
+ encoder.text_token match, :operator
298
+ else
299
+ state = :initial
300
+ end
301
+
302
+ elsif state == :module_expected
303
+ if match = scan(/<</)
304
+ encoder.text_token match, :operator
305
+ else
306
+ state = :initial
307
+ if match = scan(unicode ? / (?:#{patterns::IDENT}::)* #{patterns::IDENT} /oux :
308
+ / (?:#{patterns::IDENT}::)* #{patterns::IDENT} /ox)
309
+ encoder.text_token match, :class
310
+ end
311
+ end
312
+
313
+ elsif state == :undef_expected
314
+ state = :undef_comma_expected
315
+ if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo :
316
+ /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o)
317
+ encoder.text_token match, :method
318
+ elsif match = scan(/#{patterns::SYMBOL}/o)
319
+ case delim = match[1]
320
+ when ?', ?"
321
+ encoder.begin_group :symbol
322
+ encoder.text_token ':', :symbol
323
+ match = delim.chr
324
+ encoder.text_token match, :delimiter
325
+ state = self.class::StringState.new :symbol, delim == ?", match
326
+ state.next_state = :undef_comma_expected
327
+ else
328
+ encoder.text_token match, :symbol
329
+ end
330
+ else
331
+ state = :initial
332
+ end
333
+
334
+ elsif state == :undef_comma_expected
335
+ if match = scan(/,/)
336
+ encoder.text_token match, :operator
337
+ state = :undef_expected
338
+ else
339
+ state = :initial
340
+ end
341
+
342
+ elsif state == :alias_expected
343
+ match = scan(unicode ? /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/uo :
344
+ /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/o)
345
+
346
+ if match
347
+ encoder.text_token self[1], (self[1][0] == ?: ? :symbol : :method)
348
+ encoder.text_token self[2], :space
349
+ encoder.text_token self[3], (self[3][0] == ?: ? :symbol : :method)
350
+ end
351
+ state = :initial
352
+
353
+ else
354
+ #:nocov:
355
+ raise_inspect 'Unknown state: %p' % [state], encoder
356
+ #:nocov:
357
+ end
358
+
359
+ else # StringState
360
+
361
+ match = scan_until(state.pattern) || scan_rest
362
+ unless match.empty?
363
+ encoder.text_token match, :content
364
+ break if eos?
365
+ end
366
+
367
+ if state.heredoc && self[1] # end of heredoc
368
+ match = getch
369
+ match << scan_until(/$/) unless eos?
370
+ encoder.text_token match, :delimiter unless match.empty?
371
+ encoder.end_group state.type
372
+ state = state.next_state
373
+ next
374
+ end
375
+
376
+ case match = getch
377
+
378
+ when state.delim
379
+ if state.paren_depth
380
+ state.paren_depth -= 1
381
+ if state.paren_depth > 0
382
+ encoder.text_token match, :content
383
+ next
384
+ end
385
+ end
386
+ encoder.text_token match, :delimiter
387
+ if state.type == :regexp && !eos?
388
+ match = scan(/#{patterns::REGEXP_MODIFIERS}/o)
389
+ encoder.text_token match, :modifier unless match.empty?
390
+ end
391
+ encoder.end_group state.type
392
+ value_expected = false
393
+ state = state.next_state
394
+
395
+ when '\\'
396
+ if state.interpreted
397
+ if esc = scan(/#{patterns::ESCAPE}/o)
398
+ encoder.text_token match + esc, :char
399
+ else
400
+ encoder.text_token match, :error
401
+ end
402
+ else
403
+ case esc = getch
404
+ when nil
405
+ encoder.text_token match, :content
406
+ when state.delim, '\\'
407
+ encoder.text_token match + esc, :char
408
+ else
409
+ encoder.text_token match + esc, :content
410
+ end
411
+ end
412
+
413
+ when '#'
414
+ case peek(1)
415
+ when '{'
416
+ inline_block_stack ||= []
417
+ inline_block_stack << [state, inline_block_curly_depth, heredocs]
418
+ value_expected = true
419
+ state = :initial
420
+ inline_block_curly_depth = 1
421
+ encoder.begin_group :inline
422
+ encoder.text_token match + getch, :inline_delimiter
423
+ when '$', '@'
424
+ encoder.text_token match, :escape
425
+ last_state = state
426
+ state = :initial
427
+ else
428
+ #:nocov:
429
+ raise_inspect 'else-case # reached; #%p not handled' % [peek(1)], encoder
430
+ #:nocov:
431
+ end
432
+
433
+ when state.opening_paren
434
+ state.paren_depth += 1
435
+ encoder.text_token match, :content
436
+
437
+ else
438
+ #:nocov
439
+ raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], encoder
440
+ #:nocov:
441
+
442
+ end
443
+
444
+ end
445
+
446
+ end
447
+
448
+ # cleaning up
449
+ if state.is_a? StringState
450
+ encoder.end_group state.type
451
+ end
452
+
453
+ if options[:keep_state]
454
+ if state.is_a?(StringState) && state.heredoc
455
+ (heredocs ||= []).unshift state
456
+ state = :initial
457
+ elsif heredocs && heredocs.empty?
458
+ heredocs = nil
459
+ end
460
+ @state = state, heredocs
461
+ end
462
+
463
+ if inline_block_stack
464
+ until inline_block_stack.empty?
465
+ state, = *inline_block_stack.pop
466
+ encoder.end_group :inline
467
+ encoder.end_group state.type
468
+ end
469
+ end
470
+
471
+ encoder
472
+ end
473
+
474
+ end
475
+
476
+ end
477
+ end