notch8-cucumber 0.1.99.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (312) hide show
  1. data/History.txt +525 -0
  2. data/License.txt +20 -0
  3. data/Manifest.txt +318 -0
  4. data/README.txt +4 -0
  5. data/Rakefile +8 -0
  6. data/bin/cucumber +6 -0
  7. data/config/hoe.rb +76 -0
  8. data/config/requirements.rb +15 -0
  9. data/cucumber.yml +1 -0
  10. data/examples/cs/README.textile +1 -0
  11. data/examples/cs/Rakefile +12 -0
  12. data/examples/cs/compile.bat +1 -0
  13. data/examples/cs/features/addition.feature +16 -0
  14. data/examples/cs/features/step_definitons/calculator_steps.rb +19 -0
  15. data/examples/cs/src/demo/Calculator.cs +20 -0
  16. data/examples/dos_line_endings/Rakefile +6 -0
  17. data/examples/dos_line_endings/features/dos_line_endings.feature +9 -0
  18. data/examples/i18n/README.textile +18 -0
  19. data/examples/i18n/Rakefile +32 -0
  20. data/examples/i18n/ar/Rakefile +6 -0
  21. data/examples/i18n/ar/features/addition.feature +16 -0
  22. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +24 -0
  23. data/examples/i18n/ar/lib/calculator.rb +10 -0
  24. data/examples/i18n/da/Rakefile +6 -0
  25. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +24 -0
  26. data/examples/i18n/da/features/summering.feature +17 -0
  27. data/examples/i18n/da/lib/kalkulator.rb +11 -0
  28. data/examples/i18n/de/Rakefile +6 -0
  29. data/examples/i18n/de/features/addition.feature +16 -0
  30. data/examples/i18n/de/features/division.feature +9 -0
  31. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +24 -0
  32. data/examples/i18n/de/lib/calculator.rb +14 -0
  33. data/examples/i18n/en/Rakefile +6 -0
  34. data/examples/i18n/en/features/addition.feature +16 -0
  35. data/examples/i18n/en/features/division.feature +9 -0
  36. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +24 -0
  37. data/examples/i18n/en/lib/calculator.rb +14 -0
  38. data/examples/i18n/es/Rakefile +6 -0
  39. data/examples/i18n/es/features/adicion.feature +16 -0
  40. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +21 -0
  41. data/examples/i18n/es/lib/calculador.rb +14 -0
  42. data/examples/i18n/et/Rakefile +6 -0
  43. data/examples/i18n/et/features/liitmine.feature +16 -0
  44. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +24 -0
  45. data/examples/i18n/et/lib/kalkulaator.rb +14 -0
  46. data/examples/i18n/fi/Rakefile +6 -0
  47. data/examples/i18n/fi/features/jakolasku.feature +9 -0
  48. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +24 -0
  49. data/examples/i18n/fi/features/yhteenlasku.feature +16 -0
  50. data/examples/i18n/fi/lib/laskin.rb +14 -0
  51. data/examples/i18n/fr/Rakefile +6 -0
  52. data/examples/i18n/fr/features/addition.feature +17 -0
  53. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +25 -0
  54. data/examples/i18n/fr/lib/calculatrice.rb +10 -0
  55. data/examples/i18n/id/Rakefile +6 -0
  56. data/examples/i18n/id/features/addition.feature +16 -0
  57. data/examples/i18n/id/features/division.feature +9 -0
  58. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +24 -0
  59. data/examples/i18n/id/lib/calculator.rb +14 -0
  60. data/examples/i18n/it/Rakefile +6 -0
  61. data/examples/i18n/it/features/somma.feature +10 -0
  62. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +24 -0
  63. data/examples/i18n/it/lib/calcolatrice.rb +11 -0
  64. data/examples/i18n/ja/Rakefile +6 -0
  65. data/examples/i18n/ja/features/addition.feature +16 -0
  66. data/examples/i18n/ja/features/division.feature +9 -0
  67. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +24 -0
  68. data/examples/i18n/ja/lib/calculator.rb +14 -0
  69. data/examples/i18n/ko/Rakefile +6 -0
  70. data/examples/i18n/ko/features/addition.feature +16 -0
  71. data/examples/i18n/ko/features/division.feature +10 -0
  72. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +24 -0
  73. data/examples/i18n/ko/lib/calculator.rb +14 -0
  74. data/examples/i18n/lt/Rakefile +6 -0
  75. data/examples/i18n/lt/features/addition.feature +17 -0
  76. data/examples/i18n/lt/features/division.feature +9 -0
  77. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +24 -0
  78. data/examples/i18n/lt/lib/calculator.rb +14 -0
  79. data/examples/i18n/no/Rakefile +6 -0
  80. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +17 -0
  81. data/examples/i18n/no/features/summering.feature +18 -0
  82. data/examples/i18n/no/features/support/env.rb +6 -0
  83. data/examples/i18n/no/lib/kalkulator.rb +11 -0
  84. data/examples/i18n/pt/Rakefile +6 -0
  85. data/examples/i18n/pt/features/adicao.feature +10 -0
  86. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +24 -0
  87. data/examples/i18n/pt/lib/calculadora.rb +10 -0
  88. data/examples/i18n/ro/Rakefile +6 -0
  89. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +24 -0
  90. data/examples/i18n/ro/features/suma.feature +10 -0
  91. data/examples/i18n/ro/lib/calculator.rb +11 -0
  92. data/examples/i18n/ru/Rakefile +6 -0
  93. data/examples/i18n/ru/features/addition.feature +10 -0
  94. data/examples/i18n/ru/features/consecutive_calculations.feature +16 -0
  95. data/examples/i18n/ru/features/division.feature +15 -0
  96. data/examples/i18n/ru/features/step_definitons/calculator_steps.rb +19 -0
  97. data/examples/i18n/ru/features/support/env.rb +6 -0
  98. data/examples/i18n/ru/features/support/world.rb +7 -0
  99. data/examples/i18n/ru/lib/calculator.rb +24 -0
  100. data/examples/i18n/se/Rakefile +6 -0
  101. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +24 -0
  102. data/examples/i18n/se/features/summering.feature +17 -0
  103. data/examples/i18n/se/lib/kalkulator.rb +11 -0
  104. data/examples/i18n/zh-CN/Rakefile +6 -0
  105. data/examples/i18n/zh-CN/features/addition.feature +17 -0
  106. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +26 -0
  107. data/examples/i18n/zh-CN/lib/calculator.rb +10 -0
  108. data/examples/i18n/zh-TW/Rakefile +6 -0
  109. data/examples/i18n/zh-TW/features/addition.feature +16 -0
  110. data/examples/i18n/zh-TW/features/division.feature +10 -0
  111. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +24 -0
  112. data/examples/i18n/zh-TW/lib/calculator.rb +14 -0
  113. data/examples/java/README.textile +22 -0
  114. data/examples/java/Rakefile +12 -0
  115. data/examples/java/features/hello.feature +11 -0
  116. data/examples/java/features/step_definitons/hello_steps.rb +25 -0
  117. data/examples/java/features/step_definitons/tree_steps.rb +14 -0
  118. data/examples/java/features/tree.feature +9 -0
  119. data/examples/java/src/cucumber/demo/Hello.java +16 -0
  120. data/examples/jbehave/README.textile +17 -0
  121. data/examples/jbehave/features/support/env.rb +7 -0
  122. data/examples/jbehave/features/trading.feature +24 -0
  123. data/examples/jbehave/pom.xml +48 -0
  124. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/converters/TraderConverter.java +32 -0
  125. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Stock.java +42 -0
  126. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/model/Trader.java +29 -0
  127. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/persistence/TraderPersister.java +22 -0
  128. data/examples/jbehave/src/main/java/cukes/jbehave/examples/trader/scenarios/TraderSteps.java +65 -0
  129. data/examples/selenium/Rakefile +6 -0
  130. data/examples/selenium/features/search.feature +9 -0
  131. data/examples/self_test/README.textile +6 -0
  132. data/examples/self_test/Rakefile +6 -0
  133. data/examples/self_test/features/background/failing_background.feature +10 -0
  134. data/examples/self_test/features/background/failing_background_after_success.feature +11 -0
  135. data/examples/self_test/features/background/multiline_args_background.feature +32 -0
  136. data/examples/self_test/features/background/passing_background.feature +10 -0
  137. data/examples/self_test/features/background/pending_background.feature +10 -0
  138. data/examples/self_test/features/background/scenario_outline_failing_background.feature +16 -0
  139. data/examples/self_test/features/background/scenario_outline_passing_background.feature +16 -0
  140. data/examples/self_test/features/call_undefined_step_from_step_def.feature +7 -0
  141. data/examples/self_test/features/failing_expectation.feature +4 -0
  142. data/examples/self_test/features/lots_of_undefined.feature +8 -0
  143. data/examples/self_test/features/outline_sample.feature +15 -0
  144. data/examples/self_test/features/sample.feature +19 -0
  145. data/examples/self_test/features/step_definitions/sample_steps.rb +64 -0
  146. data/examples/self_test/features/support/env.rb +1 -0
  147. data/examples/self_test/features/support/tag_count_formatter.rb +25 -0
  148. data/examples/sinatra/Rakefile +6 -0
  149. data/examples/sinatra/app.rb +14 -0
  150. data/examples/sinatra/features/add.feature +11 -0
  151. data/examples/sinatra/features/step_definitions/add_steps.rb +15 -0
  152. data/examples/sinatra/features/support/env.rb +20 -0
  153. data/examples/sinatra/views/add.erb +5 -0
  154. data/examples/sinatra/views/layout.erb +8 -0
  155. data/examples/test_unit/Rakefile +6 -0
  156. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +26 -0
  157. data/examples/test_unit/features/test_unit.feature +9 -0
  158. data/examples/tickets/Rakefile +11 -0
  159. data/examples/tickets/cucumber.yml +2 -0
  160. data/examples/tickets/features/172.feature +28 -0
  161. data/examples/tickets/features/177/1.feature +29 -0
  162. data/examples/tickets/features/177/2.feature +21 -0
  163. data/examples/tickets/features/177/3.feature +18 -0
  164. data/examples/tickets/features/180.feature +7 -0
  165. data/examples/tickets/features/lib/eatting_machine.rb +18 -0
  166. data/examples/tickets/features/lib/pantry.rb +20 -0
  167. data/examples/tickets/features/scenario_outline.feature +95 -0
  168. data/examples/tickets/features/step_definitons/scenario_outline_steps.rb +42 -0
  169. data/examples/tickets/features/step_definitons/tickets_steps.rb +60 -0
  170. data/examples/tickets/features/tickets.feature +28 -0
  171. data/examples/watir/README.textile +16 -0
  172. data/examples/watir/Rakefile +6 -0
  173. data/examples/watir/features/search.feature +9 -0
  174. data/examples/watir/features/step_definitons/search_steps.rb +24 -0
  175. data/examples/watir/features/support/env.rb +32 -0
  176. data/features/background.feature +223 -0
  177. data/features/cucumber_cli.feature +366 -0
  178. data/features/cucumber_cli_diff_disabled.feature +45 -0
  179. data/features/cucumber_cli_outlines.feature +90 -0
  180. data/features/custom_formatter.feature +11 -0
  181. data/features/report_called_undefined_steps.feature +32 -0
  182. data/features/step_definitions/cucumber_steps.rb +30 -0
  183. data/features/step_definitions/extra_steps.rb +2 -0
  184. data/features/support/env.rb +8 -0
  185. data/gem_tasks/deployment.rake +11 -0
  186. data/gem_tasks/environment.rake +7 -0
  187. data/gem_tasks/features.rake +6 -0
  188. data/gem_tasks/fix_cr_lf.rake +10 -0
  189. data/gem_tasks/flog.rake +4 -0
  190. data/gem_tasks/gemspec.rake +10 -0
  191. data/gem_tasks/jar.rake +67 -0
  192. data/gem_tasks/rspec.rake +35 -0
  193. data/gem_tasks/yard.rake +8 -0
  194. data/lib/autotest/cucumber.rb +6 -0
  195. data/lib/autotest/cucumber_mixin.rb +125 -0
  196. data/lib/autotest/cucumber_rails.rb +6 -0
  197. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  198. data/lib/autotest/cucumber_rspec.rb +6 -0
  199. data/lib/autotest/discover.rb +9 -0
  200. data/lib/cucumber.rb +71 -0
  201. data/lib/cucumber/ast.rb +29 -0
  202. data/lib/cucumber/ast/background.rb +88 -0
  203. data/lib/cucumber/ast/comment.rb +26 -0
  204. data/lib/cucumber/ast/examples.rb +26 -0
  205. data/lib/cucumber/ast/feature.rb +66 -0
  206. data/lib/cucumber/ast/features.rb +39 -0
  207. data/lib/cucumber/ast/filter.rb +22 -0
  208. data/lib/cucumber/ast/outline_table.rb +49 -0
  209. data/lib/cucumber/ast/py_string.rb +52 -0
  210. data/lib/cucumber/ast/scenario.rb +103 -0
  211. data/lib/cucumber/ast/scenario_outline.rb +92 -0
  212. data/lib/cucumber/ast/step.rb +161 -0
  213. data/lib/cucumber/ast/steps.rb +13 -0
  214. data/lib/cucumber/ast/table.rb +290 -0
  215. data/lib/cucumber/ast/tags.rb +40 -0
  216. data/lib/cucumber/ast/visitor.rb +109 -0
  217. data/lib/cucumber/broadcaster.rb +27 -0
  218. data/lib/cucumber/cli/configuration.rb +356 -0
  219. data/lib/cucumber/cli/language_help_formatter.rb +59 -0
  220. data/lib/cucumber/cli/main.rb +107 -0
  221. data/lib/cucumber/core_ext/exception.rb +53 -0
  222. data/lib/cucumber/core_ext/instance_exec.rb +54 -0
  223. data/lib/cucumber/core_ext/proc.rb +33 -0
  224. data/lib/cucumber/core_ext/string.rb +48 -0
  225. data/lib/cucumber/formatter.rb +1 -0
  226. data/lib/cucumber/formatter/ansicolor.rb +103 -0
  227. data/lib/cucumber/formatter/color_io.rb +23 -0
  228. data/lib/cucumber/formatter/console.rb +119 -0
  229. data/lib/cucumber/formatter/cucumber.css +55 -0
  230. data/lib/cucumber/formatter/cucumber.sass +49 -0
  231. data/lib/cucumber/formatter/html.rb +130 -0
  232. data/lib/cucumber/formatter/pretty.rb +172 -0
  233. data/lib/cucumber/formatter/profile.rb +77 -0
  234. data/lib/cucumber/formatter/progress.rb +74 -0
  235. data/lib/cucumber/formatter/rerun.rb +39 -0
  236. data/lib/cucumber/formatter/unicode.rb +35 -0
  237. data/lib/cucumber/formatters/unicode.rb +2 -0
  238. data/lib/cucumber/jbehave.rb +102 -0
  239. data/lib/cucumber/languages.yml +374 -0
  240. data/lib/cucumber/parser.rb +43 -0
  241. data/lib/cucumber/parser/basic.rb +0 -0
  242. data/lib/cucumber/parser/feature.rb +1490 -0
  243. data/lib/cucumber/parser/feature.tt +188 -0
  244. data/lib/cucumber/parser/i18n.tt +31 -0
  245. data/lib/cucumber/parser/table.rb +402 -0
  246. data/lib/cucumber/parser/table.tt +59 -0
  247. data/lib/cucumber/parser/treetop_ext.rb +75 -0
  248. data/lib/cucumber/platform.rb +18 -0
  249. data/lib/cucumber/rails/rspec.rb +8 -0
  250. data/lib/cucumber/rails/world.rb +73 -0
  251. data/lib/cucumber/rake/task.rb +139 -0
  252. data/lib/cucumber/step_definition.rb +94 -0
  253. data/lib/cucumber/step_mother.rb +194 -0
  254. data/lib/cucumber/version.rb +10 -0
  255. data/rails_generators/cucumber/USAGE +11 -0
  256. data/rails_generators/cucumber/cucumber_generator.rb +50 -0
  257. data/rails_generators/cucumber/templates/cucumber +8 -0
  258. data/rails_generators/cucumber/templates/cucumber.rake +15 -0
  259. data/rails_generators/cucumber/templates/env.rb +17 -0
  260. data/rails_generators/cucumber/templates/paths.rb +19 -0
  261. data/rails_generators/cucumber/templates/webrat_steps.rb +115 -0
  262. data/rails_generators/feature/USAGE +12 -0
  263. data/rails_generators/feature/feature_generator.rb +36 -0
  264. data/rails_generators/feature/templates/feature.erb +31 -0
  265. data/rails_generators/feature/templates/steps.erb +24 -0
  266. data/spec/cucumber/ast/background_spec.rb +58 -0
  267. data/spec/cucumber/ast/feature_factory.rb +54 -0
  268. data/spec/cucumber/ast/feature_spec.rb +60 -0
  269. data/spec/cucumber/ast/py_string_spec.rb +40 -0
  270. data/spec/cucumber/ast/scenario_outline_spec.rb +64 -0
  271. data/spec/cucumber/ast/scenario_spec.rb +82 -0
  272. data/spec/cucumber/ast/step_spec.rb +45 -0
  273. data/spec/cucumber/ast/table_spec.rb +139 -0
  274. data/spec/cucumber/ast/tags_spec.rb +35 -0
  275. data/spec/cucumber/broadcaster_spec.rb +25 -0
  276. data/spec/cucumber/cli/configuration_spec.rb +268 -0
  277. data/spec/cucumber/cli/main_spec.rb +203 -0
  278. data/spec/cucumber/core_ext/proc_spec.rb +37 -0
  279. data/spec/cucumber/core_ext/string_spec.rb +42 -0
  280. data/spec/cucumber/formatter/ansicolor_spec.rb +35 -0
  281. data/spec/cucumber/formatter/color_io_spec.rb +26 -0
  282. data/spec/cucumber/formatter/html/cucumber.css +37 -0
  283. data/spec/cucumber/formatter/html/cucumber.js +13 -0
  284. data/spec/cucumber/formatter/html/index.html +45 -0
  285. data/spec/cucumber/formatter/html/jquery-1.3.min.js +19 -0
  286. data/spec/cucumber/formatter/html/jquery.uitableedit.js +100 -0
  287. data/spec/cucumber/formatters/profile_formatter_spec.rb +198 -0
  288. data/spec/cucumber/parser/feature_parser_spec.rb +281 -0
  289. data/spec/cucumber/parser/table_parser_spec.rb +48 -0
  290. data/spec/cucumber/rails/stubs/mini_rails.rb +18 -0
  291. data/spec/cucumber/rails/stubs/test_help.rb +1 -0
  292. data/spec/cucumber/rails/world_spec.rb +11 -0
  293. data/spec/cucumber/sell_cucumbers.feature +19 -0
  294. data/spec/cucumber/step_definition_spec.rb +70 -0
  295. data/spec/cucumber/step_mother_spec.rb +73 -0
  296. data/spec/cucumber/treetop_parser/empty_feature.feature +4 -0
  297. data/spec/cucumber/treetop_parser/empty_scenario.feature +9 -0
  298. data/spec/cucumber/treetop_parser/empty_scenario_outline.feature +3 -0
  299. data/spec/cucumber/treetop_parser/fit_scenario.feature +8 -0
  300. data/spec/cucumber/treetop_parser/given_scenario.feature +9 -0
  301. data/spec/cucumber/treetop_parser/invalid_scenario_outlines.feature +7 -0
  302. data/spec/cucumber/treetop_parser/multiline_steps.feature +17 -0
  303. data/spec/cucumber/treetop_parser/multiple_tables.feature +27 -0
  304. data/spec/cucumber/treetop_parser/scenario_outline.feature +16 -0
  305. data/spec/cucumber/treetop_parser/spaces.feature +12 -0
  306. data/spec/cucumber/treetop_parser/test_dos.feature +25 -0
  307. data/spec/cucumber/treetop_parser/with_comments.feature +10 -0
  308. data/spec/cucumber/treetop_parser/with_tags.feature +18 -0
  309. data/spec/cucumber/world/pending_spec.rb +47 -0
  310. data/spec/spec.opts +2 -0
  311. data/spec/spec_helper.rb +21 -0
  312. metadata +428 -0
@@ -0,0 +1,43 @@
1
+ require 'erb'
2
+ require 'cucumber/platform'
3
+ require 'cucumber/ast'
4
+ require 'cucumber/parser/treetop_ext'
5
+ require 'cucumber/parser/table'
6
+
7
+ module Cucumber
8
+ # Classes in this module parse feature files and translate the parse tree
9
+ # (concrete syntax tree) into an abstract syntax tree (AST) using
10
+ # <a href="http://martinfowler.com/dslwip/EmbeddedTranslation.html">Embedded translation</a>.
11
+ #
12
+ # The AST is built by the various <tt>#build</tt> methods in the parse tree.
13
+ #
14
+ # The AST classes are defined in the Cucumber::Ast module.
15
+ module Parser
16
+ translator = Module.new do
17
+ def keywordz(key)
18
+ 'Scenario'
19
+ end
20
+ end
21
+
22
+ def self.load_parser(keywords)
23
+ Loader.new(keywords)
24
+ end
25
+
26
+ class Loader
27
+ def initialize(keywords)
28
+ @keywords = keywords
29
+ i18n_tt = File.expand_path(File.dirname(__FILE__) + '/parser/i18n.tt')
30
+ template = File.open(i18n_tt, Cucumber.file_mode('r')).read
31
+ erb = ERB.new(template)
32
+ grammar = erb.result(binding)
33
+ Treetop.load_from_string(grammar)
34
+ require 'cucumber/parser/feature'
35
+ end
36
+
37
+ def keywords(key)
38
+ values = @keywords[key].split('|')
39
+ values.map{|value| "'#{value}'"}.join(" / ")
40
+ end
41
+ end
42
+ end
43
+ end
File without changes
@@ -0,0 +1,1490 @@
1
+ module Cucumber
2
+ module Parser
3
+ # TIP: When you hack on the grammar, just delete feature.rb in this directory.
4
+ # Also make sure you have uninstalled all cucumber gems (don't forget xxx-cucumber
5
+ # github gems).
6
+ #
7
+ # Treetop will then generate the parser in-memory. When you're happy, just generate
8
+ # the rb file with tt feature.tt
9
+ module Feature
10
+ include Treetop::Runtime
11
+
12
+ def root
13
+ @root || :feature
14
+ end
15
+
16
+ include I18n
17
+
18
+ include Table
19
+
20
+ module Feature0
21
+ end
22
+
23
+ module Feature1
24
+ def white
25
+ elements[0]
26
+ end
27
+
28
+ def comment
29
+ elements[1]
30
+ end
31
+
32
+ def white
33
+ elements[2]
34
+ end
35
+
36
+ def tags
37
+ elements[3]
38
+ end
39
+
40
+ def white
41
+ elements[4]
42
+ end
43
+
44
+ def header
45
+ elements[5]
46
+ end
47
+
48
+ def background
49
+ elements[6]
50
+ end
51
+
52
+ def feature_elements
53
+ elements[7]
54
+ end
55
+
56
+ end
57
+
58
+ module Feature2
59
+ def build
60
+ if background.respond_to?(:build)
61
+ Ast::Feature.new(comment.build, tags.build, header.text_value, feature_elements.build, background.build)
62
+ else
63
+ Ast::Feature.new(comment.build, tags.build, header.text_value, feature_elements.build)
64
+ end
65
+ end
66
+ end
67
+
68
+ def _nt_feature
69
+ start_index = index
70
+ if node_cache[:feature].has_key?(index)
71
+ cached = node_cache[:feature][index]
72
+ @index = cached.interval.end if cached
73
+ return cached
74
+ end
75
+
76
+ i0, s0 = index, []
77
+ r1 = _nt_white
78
+ s0 << r1
79
+ if r1
80
+ r2 = _nt_comment
81
+ s0 << r2
82
+ if r2
83
+ r3 = _nt_white
84
+ s0 << r3
85
+ if r3
86
+ r4 = _nt_tags
87
+ s0 << r4
88
+ if r4
89
+ r5 = _nt_white
90
+ s0 << r5
91
+ if r5
92
+ s6, i6 = [], index
93
+ loop do
94
+ i7, s7 = index, []
95
+ i8 = index
96
+ i9 = index
97
+ r10 = _nt_scenario_outline
98
+ if r10
99
+ r9 = r10
100
+ else
101
+ r11 = _nt_scenario
102
+ if r11
103
+ r9 = r11
104
+ else
105
+ r12 = _nt_background
106
+ if r12
107
+ r9 = r12
108
+ else
109
+ self.index = i9
110
+ r9 = nil
111
+ end
112
+ end
113
+ end
114
+ if r9
115
+ r8 = nil
116
+ else
117
+ self.index = i8
118
+ r8 = SyntaxNode.new(input, index...index)
119
+ end
120
+ s7 << r8
121
+ if r8
122
+ if index < input_length
123
+ r13 = (SyntaxNode).new(input, index...(index + 1))
124
+ @index += 1
125
+ else
126
+ terminal_parse_failure("any character")
127
+ r13 = nil
128
+ end
129
+ s7 << r13
130
+ end
131
+ if s7.last
132
+ r7 = (SyntaxNode).new(input, i7...index, s7)
133
+ r7.extend(Feature0)
134
+ else
135
+ self.index = i7
136
+ r7 = nil
137
+ end
138
+ if r7
139
+ s6 << r7
140
+ else
141
+ break
142
+ end
143
+ end
144
+ r6 = SyntaxNode.new(input, i6...index, s6)
145
+ s0 << r6
146
+ if r6
147
+ r15 = _nt_background
148
+ if r15
149
+ r14 = r15
150
+ else
151
+ r14 = SyntaxNode.new(input, index...index)
152
+ end
153
+ s0 << r14
154
+ if r14
155
+ r16 = _nt_feature_elements
156
+ s0 << r16
157
+ if r16
158
+ r18 = _nt_comment
159
+ if r18
160
+ r17 = r18
161
+ else
162
+ r17 = SyntaxNode.new(input, index...index)
163
+ end
164
+ s0 << r17
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
173
+ if s0.last
174
+ r0 = (SyntaxNode).new(input, i0...index, s0)
175
+ r0.extend(Feature1)
176
+ r0.extend(Feature2)
177
+ else
178
+ self.index = i0
179
+ r0 = nil
180
+ end
181
+
182
+ node_cache[:feature][start_index] = r0
183
+
184
+ return r0
185
+ end
186
+
187
+ module Tags0
188
+ def tag
189
+ elements[0]
190
+ end
191
+
192
+ end
193
+
194
+ module Tags1
195
+ def white
196
+ elements[0]
197
+ end
198
+
199
+ def ts
200
+ elements[1]
201
+ end
202
+ end
203
+
204
+ module Tags2
205
+ def build
206
+ tag_names = ts.elements.map{|e| e.tag.tag_name.text_value}
207
+ Ast::Tags.new(ts.line, tag_names)
208
+ end
209
+ end
210
+
211
+ def _nt_tags
212
+ start_index = index
213
+ if node_cache[:tags].has_key?(index)
214
+ cached = node_cache[:tags][index]
215
+ @index = cached.interval.end if cached
216
+ return cached
217
+ end
218
+
219
+ i0, s0 = index, []
220
+ r1 = _nt_white
221
+ s0 << r1
222
+ if r1
223
+ s2, i2 = [], index
224
+ loop do
225
+ i3, s3 = index, []
226
+ r4 = _nt_tag
227
+ s3 << r4
228
+ if r4
229
+ s5, i5 = [], index
230
+ loop do
231
+ i6 = index
232
+ r7 = _nt_space
233
+ if r7
234
+ r6 = r7
235
+ else
236
+ r8 = _nt_eol
237
+ if r8
238
+ r6 = r8
239
+ else
240
+ self.index = i6
241
+ r6 = nil
242
+ end
243
+ end
244
+ if r6
245
+ s5 << r6
246
+ else
247
+ break
248
+ end
249
+ end
250
+ if s5.empty?
251
+ self.index = i5
252
+ r5 = nil
253
+ else
254
+ r5 = SyntaxNode.new(input, i5...index, s5)
255
+ end
256
+ s3 << r5
257
+ end
258
+ if s3.last
259
+ r3 = (SyntaxNode).new(input, i3...index, s3)
260
+ r3.extend(Tags0)
261
+ else
262
+ self.index = i3
263
+ r3 = nil
264
+ end
265
+ if r3
266
+ s2 << r3
267
+ else
268
+ break
269
+ end
270
+ end
271
+ r2 = SyntaxNode.new(input, i2...index, s2)
272
+ s0 << r2
273
+ end
274
+ if s0.last
275
+ r0 = (SyntaxNode).new(input, i0...index, s0)
276
+ r0.extend(Tags1)
277
+ r0.extend(Tags2)
278
+ else
279
+ self.index = i0
280
+ r0 = nil
281
+ end
282
+
283
+ node_cache[:tags][start_index] = r0
284
+
285
+ return r0
286
+ end
287
+
288
+ module Tag0
289
+ def tag_name
290
+ elements[1]
291
+ end
292
+ end
293
+
294
+ def _nt_tag
295
+ start_index = index
296
+ if node_cache[:tag].has_key?(index)
297
+ cached = node_cache[:tag][index]
298
+ @index = cached.interval.end if cached
299
+ return cached
300
+ end
301
+
302
+ i0, s0 = index, []
303
+ if input.index('@', index) == index
304
+ r1 = (SyntaxNode).new(input, index...(index + 1))
305
+ @index += 1
306
+ else
307
+ terminal_parse_failure('@')
308
+ r1 = nil
309
+ end
310
+ s0 << r1
311
+ if r1
312
+ s2, i2 = [], index
313
+ loop do
314
+ if input.index(Regexp.new('[^@\\n\\t ]'), index) == index
315
+ r3 = (SyntaxNode).new(input, index...(index + 1))
316
+ @index += 1
317
+ else
318
+ r3 = nil
319
+ end
320
+ if r3
321
+ s2 << r3
322
+ else
323
+ break
324
+ end
325
+ end
326
+ if s2.empty?
327
+ self.index = i2
328
+ r2 = nil
329
+ else
330
+ r2 = SyntaxNode.new(input, i2...index, s2)
331
+ end
332
+ s0 << r2
333
+ end
334
+ if s0.last
335
+ r0 = (SyntaxNode).new(input, i0...index, s0)
336
+ r0.extend(Tag0)
337
+ else
338
+ self.index = i0
339
+ r0 = nil
340
+ end
341
+
342
+ node_cache[:tag][start_index] = r0
343
+
344
+ return r0
345
+ end
346
+
347
+ module Comment0
348
+ def comment_line
349
+ elements[0]
350
+ end
351
+
352
+ def white
353
+ elements[1]
354
+ end
355
+ end
356
+
357
+ module Comment1
358
+ def build
359
+ Ast::Comment.new(text_value)
360
+ end
361
+ end
362
+
363
+ def _nt_comment
364
+ start_index = index
365
+ if node_cache[:comment].has_key?(index)
366
+ cached = node_cache[:comment][index]
367
+ @index = cached.interval.end if cached
368
+ return cached
369
+ end
370
+
371
+ s0, i0 = [], index
372
+ loop do
373
+ i1, s1 = index, []
374
+ r2 = _nt_comment_line
375
+ s1 << r2
376
+ if r2
377
+ r3 = _nt_white
378
+ s1 << r3
379
+ end
380
+ if s1.last
381
+ r1 = (SyntaxNode).new(input, i1...index, s1)
382
+ r1.extend(Comment0)
383
+ else
384
+ self.index = i1
385
+ r1 = nil
386
+ end
387
+ if r1
388
+ s0 << r1
389
+ else
390
+ break
391
+ end
392
+ end
393
+ r0 = SyntaxNode.new(input, i0...index, s0)
394
+ r0.extend(Comment1)
395
+
396
+ node_cache[:comment][start_index] = r0
397
+
398
+ return r0
399
+ end
400
+
401
+ module CommentLine0
402
+ def line_to_eol
403
+ elements[1]
404
+ end
405
+ end
406
+
407
+ def _nt_comment_line
408
+ start_index = index
409
+ if node_cache[:comment_line].has_key?(index)
410
+ cached = node_cache[:comment_line][index]
411
+ @index = cached.interval.end if cached
412
+ return cached
413
+ end
414
+
415
+ i0, s0 = index, []
416
+ if input.index('#', index) == index
417
+ r1 = (SyntaxNode).new(input, index...(index + 1))
418
+ @index += 1
419
+ else
420
+ terminal_parse_failure('#')
421
+ r1 = nil
422
+ end
423
+ s0 << r1
424
+ if r1
425
+ r2 = _nt_line_to_eol
426
+ s0 << r2
427
+ end
428
+ if s0.last
429
+ r0 = (SyntaxNode).new(input, i0...index, s0)
430
+ r0.extend(CommentLine0)
431
+ else
432
+ self.index = i0
433
+ r0 = nil
434
+ end
435
+
436
+ node_cache[:comment_line][start_index] = r0
437
+
438
+ return r0
439
+ end
440
+
441
+ module Background0
442
+ def comment
443
+ elements[0]
444
+ end
445
+
446
+ def white
447
+ elements[1]
448
+ end
449
+
450
+ def background_keyword
451
+ elements[2]
452
+ end
453
+
454
+ def steps
455
+ elements[5]
456
+ end
457
+ end
458
+
459
+ module Background1
460
+ def build
461
+ Ast::Background.new(
462
+ comment.build,
463
+ background_keyword.line,
464
+ background_keyword.text_value,
465
+ steps.build
466
+ )
467
+ end
468
+ end
469
+
470
+ def _nt_background
471
+ start_index = index
472
+ if node_cache[:background].has_key?(index)
473
+ cached = node_cache[:background][index]
474
+ @index = cached.interval.end if cached
475
+ return cached
476
+ end
477
+
478
+ i0, s0 = index, []
479
+ r1 = _nt_comment
480
+ s0 << r1
481
+ if r1
482
+ r2 = _nt_white
483
+ s0 << r2
484
+ if r2
485
+ r3 = _nt_background_keyword
486
+ s0 << r3
487
+ if r3
488
+ s4, i4 = [], index
489
+ loop do
490
+ r5 = _nt_space
491
+ if r5
492
+ s4 << r5
493
+ else
494
+ break
495
+ end
496
+ end
497
+ r4 = SyntaxNode.new(input, i4...index, s4)
498
+ s0 << r4
499
+ if r4
500
+ i6 = index
501
+ s7, i7 = [], index
502
+ loop do
503
+ r8 = _nt_eol
504
+ if r8
505
+ s7 << r8
506
+ else
507
+ break
508
+ end
509
+ end
510
+ if s7.empty?
511
+ self.index = i7
512
+ r7 = nil
513
+ else
514
+ r7 = SyntaxNode.new(input, i7...index, s7)
515
+ end
516
+ if r7
517
+ r6 = r7
518
+ else
519
+ r9 = _nt_eof
520
+ if r9
521
+ r6 = r9
522
+ else
523
+ self.index = i6
524
+ r6 = nil
525
+ end
526
+ end
527
+ s0 << r6
528
+ if r6
529
+ r10 = _nt_steps
530
+ s0 << r10
531
+ end
532
+ end
533
+ end
534
+ end
535
+ end
536
+ if s0.last
537
+ r0 = (SyntaxNode).new(input, i0...index, s0)
538
+ r0.extend(Background0)
539
+ r0.extend(Background1)
540
+ else
541
+ self.index = i0
542
+ r0 = nil
543
+ end
544
+
545
+ node_cache[:background][start_index] = r0
546
+
547
+ return r0
548
+ end
549
+
550
+ module FeatureElements0
551
+ def build
552
+ elements.map{|s| s.build}
553
+ end
554
+ end
555
+
556
+ def _nt_feature_elements
557
+ start_index = index
558
+ if node_cache[:feature_elements].has_key?(index)
559
+ cached = node_cache[:feature_elements][index]
560
+ @index = cached.interval.end if cached
561
+ return cached
562
+ end
563
+
564
+ s0, i0 = [], index
565
+ loop do
566
+ i1 = index
567
+ r2 = _nt_scenario
568
+ if r2
569
+ r1 = r2
570
+ else
571
+ r3 = _nt_scenario_outline
572
+ if r3
573
+ r1 = r3
574
+ else
575
+ self.index = i1
576
+ r1 = nil
577
+ end
578
+ end
579
+ if r1
580
+ s0 << r1
581
+ else
582
+ break
583
+ end
584
+ end
585
+ r0 = SyntaxNode.new(input, i0...index, s0)
586
+ r0.extend(FeatureElements0)
587
+
588
+ node_cache[:feature_elements][start_index] = r0
589
+
590
+ return r0
591
+ end
592
+
593
+ module Scenario0
594
+ def comment
595
+ elements[0]
596
+ end
597
+
598
+ def tags
599
+ elements[1]
600
+ end
601
+
602
+ def white
603
+ elements[2]
604
+ end
605
+
606
+ def scenario_keyword
607
+ elements[3]
608
+ end
609
+
610
+ def name
611
+ elements[5]
612
+ end
613
+
614
+ def steps
615
+ elements[7]
616
+ end
617
+
618
+ def white
619
+ elements[8]
620
+ end
621
+ end
622
+
623
+ module Scenario1
624
+ def build
625
+ Ast::Scenario.new(
626
+ comment.build,
627
+ tags.build,
628
+ scenario_keyword.line,
629
+ scenario_keyword.text_value,
630
+ name.text_value,
631
+ steps.build
632
+ )
633
+ end
634
+ end
635
+
636
+ def _nt_scenario
637
+ start_index = index
638
+ if node_cache[:scenario].has_key?(index)
639
+ cached = node_cache[:scenario][index]
640
+ @index = cached.interval.end if cached
641
+ return cached
642
+ end
643
+
644
+ i0, s0 = index, []
645
+ r1 = _nt_comment
646
+ s0 << r1
647
+ if r1
648
+ r2 = _nt_tags
649
+ s0 << r2
650
+ if r2
651
+ r3 = _nt_white
652
+ s0 << r3
653
+ if r3
654
+ r4 = _nt_scenario_keyword
655
+ s0 << r4
656
+ if r4
657
+ s5, i5 = [], index
658
+ loop do
659
+ r6 = _nt_space
660
+ if r6
661
+ s5 << r6
662
+ else
663
+ break
664
+ end
665
+ end
666
+ r5 = SyntaxNode.new(input, i5...index, s5)
667
+ s0 << r5
668
+ if r5
669
+ r7 = _nt_line_to_eol
670
+ s0 << r7
671
+ if r7
672
+ i8 = index
673
+ r9 = _nt_white
674
+ if r9
675
+ r8 = r9
676
+ else
677
+ r10 = _nt_eof
678
+ if r10
679
+ r8 = r10
680
+ else
681
+ self.index = i8
682
+ r8 = nil
683
+ end
684
+ end
685
+ s0 << r8
686
+ if r8
687
+ r11 = _nt_steps
688
+ s0 << r11
689
+ if r11
690
+ r12 = _nt_white
691
+ s0 << r12
692
+ end
693
+ end
694
+ end
695
+ end
696
+ end
697
+ end
698
+ end
699
+ end
700
+ if s0.last
701
+ r0 = (SyntaxNode).new(input, i0...index, s0)
702
+ r0.extend(Scenario0)
703
+ r0.extend(Scenario1)
704
+ else
705
+ self.index = i0
706
+ r0 = nil
707
+ end
708
+
709
+ node_cache[:scenario][start_index] = r0
710
+
711
+ return r0
712
+ end
713
+
714
+ module ScenarioOutline0
715
+ def comment
716
+ elements[0]
717
+ end
718
+
719
+ def tags
720
+ elements[1]
721
+ end
722
+
723
+ def white
724
+ elements[2]
725
+ end
726
+
727
+ def scenario_outline_keyword
728
+ elements[3]
729
+ end
730
+
731
+ def name
732
+ elements[5]
733
+ end
734
+
735
+ def white
736
+ elements[6]
737
+ end
738
+
739
+ def steps
740
+ elements[7]
741
+ end
742
+
743
+ def examples_sections
744
+ elements[8]
745
+ end
746
+
747
+ def white
748
+ elements[9]
749
+ end
750
+ end
751
+
752
+ module ScenarioOutline1
753
+ def build
754
+ Ast::ScenarioOutline.new(
755
+ comment.build,
756
+ tags.build,
757
+ scenario_outline_keyword.line,
758
+ scenario_outline_keyword.text_value,
759
+ name.text_value,
760
+ steps.build,
761
+ examples_sections.build
762
+ )
763
+ end
764
+ end
765
+
766
+ def _nt_scenario_outline
767
+ start_index = index
768
+ if node_cache[:scenario_outline].has_key?(index)
769
+ cached = node_cache[:scenario_outline][index]
770
+ @index = cached.interval.end if cached
771
+ return cached
772
+ end
773
+
774
+ i0, s0 = index, []
775
+ r1 = _nt_comment
776
+ s0 << r1
777
+ if r1
778
+ r2 = _nt_tags
779
+ s0 << r2
780
+ if r2
781
+ r3 = _nt_white
782
+ s0 << r3
783
+ if r3
784
+ r4 = _nt_scenario_outline_keyword
785
+ s0 << r4
786
+ if r4
787
+ s5, i5 = [], index
788
+ loop do
789
+ r6 = _nt_space
790
+ if r6
791
+ s5 << r6
792
+ else
793
+ break
794
+ end
795
+ end
796
+ r5 = SyntaxNode.new(input, i5...index, s5)
797
+ s0 << r5
798
+ if r5
799
+ r7 = _nt_line_to_eol
800
+ s0 << r7
801
+ if r7
802
+ r8 = _nt_white
803
+ s0 << r8
804
+ if r8
805
+ r9 = _nt_steps
806
+ s0 << r9
807
+ if r9
808
+ r10 = _nt_examples_sections
809
+ s0 << r10
810
+ if r10
811
+ r11 = _nt_white
812
+ s0 << r11
813
+ end
814
+ end
815
+ end
816
+ end
817
+ end
818
+ end
819
+ end
820
+ end
821
+ end
822
+ if s0.last
823
+ r0 = (SyntaxNode).new(input, i0...index, s0)
824
+ r0.extend(ScenarioOutline0)
825
+ r0.extend(ScenarioOutline1)
826
+ else
827
+ self.index = i0
828
+ r0 = nil
829
+ end
830
+
831
+ node_cache[:scenario_outline][start_index] = r0
832
+
833
+ return r0
834
+ end
835
+
836
+ module Steps0
837
+ def build
838
+ elements.map{|e| e.build}
839
+ end
840
+ end
841
+
842
+ def _nt_steps
843
+ start_index = index
844
+ if node_cache[:steps].has_key?(index)
845
+ cached = node_cache[:steps][index]
846
+ @index = cached.interval.end if cached
847
+ return cached
848
+ end
849
+
850
+ s0, i0 = [], index
851
+ loop do
852
+ r1 = _nt_step
853
+ if r1
854
+ s0 << r1
855
+ else
856
+ break
857
+ end
858
+ end
859
+ r0 = SyntaxNode.new(input, i0...index, s0)
860
+ r0.extend(Steps0)
861
+
862
+ node_cache[:steps][start_index] = r0
863
+
864
+ return r0
865
+ end
866
+
867
+ module Step0
868
+ def comment
869
+ elements[0]
870
+ end
871
+
872
+ def step_keyword
873
+ elements[2]
874
+ end
875
+
876
+ def name
877
+ elements[4]
878
+ end
879
+
880
+ def multi
881
+ elements[6]
882
+ end
883
+
884
+ def white
885
+ elements[7]
886
+ end
887
+ end
888
+
889
+ module Step1
890
+ def build
891
+ if multi.respond_to?(:build)
892
+ Ast::Step.new(step_keyword.line, step_keyword.text_value, name.text_value.strip, multi.build)
893
+ else
894
+ Ast::Step.new(step_keyword.line, step_keyword.text_value, name.text_value.strip)
895
+ end
896
+ end
897
+ end
898
+
899
+ def _nt_step
900
+ start_index = index
901
+ if node_cache[:step].has_key?(index)
902
+ cached = node_cache[:step][index]
903
+ @index = cached.interval.end if cached
904
+ return cached
905
+ end
906
+
907
+ i0, s0 = index, []
908
+ r1 = _nt_comment
909
+ s0 << r1
910
+ if r1
911
+ s2, i2 = [], index
912
+ loop do
913
+ r3 = _nt_space
914
+ if r3
915
+ s2 << r3
916
+ else
917
+ break
918
+ end
919
+ end
920
+ r2 = SyntaxNode.new(input, i2...index, s2)
921
+ s0 << r2
922
+ if r2
923
+ r4 = _nt_step_keyword
924
+ s0 << r4
925
+ if r4
926
+ s5, i5 = [], index
927
+ loop do
928
+ r6 = _nt_space
929
+ if r6
930
+ s5 << r6
931
+ else
932
+ break
933
+ end
934
+ end
935
+ r5 = SyntaxNode.new(input, i5...index, s5)
936
+ s0 << r5
937
+ if r5
938
+ r7 = _nt_line_to_eol
939
+ s0 << r7
940
+ if r7
941
+ i8 = index
942
+ s9, i9 = [], index
943
+ loop do
944
+ r10 = _nt_eol
945
+ if r10
946
+ s9 << r10
947
+ else
948
+ break
949
+ end
950
+ end
951
+ if s9.empty?
952
+ self.index = i9
953
+ r9 = nil
954
+ else
955
+ r9 = SyntaxNode.new(input, i9...index, s9)
956
+ end
957
+ if r9
958
+ r8 = r9
959
+ else
960
+ r11 = _nt_eof
961
+ if r11
962
+ r8 = r11
963
+ else
964
+ self.index = i8
965
+ r8 = nil
966
+ end
967
+ end
968
+ s0 << r8
969
+ if r8
970
+ r13 = _nt_multiline_arg
971
+ if r13
972
+ r12 = r13
973
+ else
974
+ r12 = SyntaxNode.new(input, index...index)
975
+ end
976
+ s0 << r12
977
+ if r12
978
+ r14 = _nt_white
979
+ s0 << r14
980
+ end
981
+ end
982
+ end
983
+ end
984
+ end
985
+ end
986
+ end
987
+ if s0.last
988
+ r0 = (SyntaxNode).new(input, i0...index, s0)
989
+ r0.extend(Step0)
990
+ r0.extend(Step1)
991
+ else
992
+ self.index = i0
993
+ r0 = nil
994
+ end
995
+
996
+ node_cache[:step][start_index] = r0
997
+
998
+ return r0
999
+ end
1000
+
1001
+ module ExamplesSections0
1002
+ def build
1003
+ elements.map{|e| e.build}
1004
+ end
1005
+ end
1006
+
1007
+ def _nt_examples_sections
1008
+ start_index = index
1009
+ if node_cache[:examples_sections].has_key?(index)
1010
+ cached = node_cache[:examples_sections][index]
1011
+ @index = cached.interval.end if cached
1012
+ return cached
1013
+ end
1014
+
1015
+ s0, i0 = [], index
1016
+ loop do
1017
+ r1 = _nt_examples
1018
+ if r1
1019
+ s0 << r1
1020
+ else
1021
+ break
1022
+ end
1023
+ end
1024
+ r0 = SyntaxNode.new(input, i0...index, s0)
1025
+ r0.extend(ExamplesSections0)
1026
+
1027
+ node_cache[:examples_sections][start_index] = r0
1028
+
1029
+ return r0
1030
+ end
1031
+
1032
+ module Examples0
1033
+ def examples_keyword
1034
+ elements[1]
1035
+ end
1036
+
1037
+ def name
1038
+ elements[3]
1039
+ end
1040
+
1041
+ def eol
1042
+ elements[4]
1043
+ end
1044
+
1045
+ def table
1046
+ elements[5]
1047
+ end
1048
+
1049
+ def white
1050
+ elements[6]
1051
+ end
1052
+ end
1053
+
1054
+ module Examples1
1055
+ def build
1056
+ [examples_keyword.line, examples_keyword.text_value, name.text_value, table.raw]
1057
+ end
1058
+ end
1059
+
1060
+ def _nt_examples
1061
+ start_index = index
1062
+ if node_cache[:examples].has_key?(index)
1063
+ cached = node_cache[:examples][index]
1064
+ @index = cached.interval.end if cached
1065
+ return cached
1066
+ end
1067
+
1068
+ i0, s0 = index, []
1069
+ s1, i1 = [], index
1070
+ loop do
1071
+ r2 = _nt_space
1072
+ if r2
1073
+ s1 << r2
1074
+ else
1075
+ break
1076
+ end
1077
+ end
1078
+ r1 = SyntaxNode.new(input, i1...index, s1)
1079
+ s0 << r1
1080
+ if r1
1081
+ r3 = _nt_examples_keyword
1082
+ s0 << r3
1083
+ if r3
1084
+ s4, i4 = [], index
1085
+ loop do
1086
+ r5 = _nt_space
1087
+ if r5
1088
+ s4 << r5
1089
+ else
1090
+ break
1091
+ end
1092
+ end
1093
+ r4 = SyntaxNode.new(input, i4...index, s4)
1094
+ s0 << r4
1095
+ if r4
1096
+ r7 = _nt_line_to_eol
1097
+ if r7
1098
+ r6 = r7
1099
+ else
1100
+ r6 = SyntaxNode.new(input, index...index)
1101
+ end
1102
+ s0 << r6
1103
+ if r6
1104
+ r8 = _nt_eol
1105
+ s0 << r8
1106
+ if r8
1107
+ r9 = _nt_table
1108
+ s0 << r9
1109
+ if r9
1110
+ r10 = _nt_white
1111
+ s0 << r10
1112
+ end
1113
+ end
1114
+ end
1115
+ end
1116
+ end
1117
+ end
1118
+ if s0.last
1119
+ r0 = (SyntaxNode).new(input, i0...index, s0)
1120
+ r0.extend(Examples0)
1121
+ r0.extend(Examples1)
1122
+ else
1123
+ self.index = i0
1124
+ r0 = nil
1125
+ end
1126
+
1127
+ node_cache[:examples][start_index] = r0
1128
+
1129
+ return r0
1130
+ end
1131
+
1132
+ def _nt_multiline_arg
1133
+ start_index = index
1134
+ if node_cache[:multiline_arg].has_key?(index)
1135
+ cached = node_cache[:multiline_arg][index]
1136
+ @index = cached.interval.end if cached
1137
+ return cached
1138
+ end
1139
+
1140
+ i0 = index
1141
+ r1 = _nt_table
1142
+ if r1
1143
+ r0 = r1
1144
+ else
1145
+ r2 = _nt_py_string
1146
+ if r2
1147
+ r0 = r2
1148
+ else
1149
+ self.index = i0
1150
+ r0 = nil
1151
+ end
1152
+ end
1153
+
1154
+ node_cache[:multiline_arg][start_index] = r0
1155
+
1156
+ return r0
1157
+ end
1158
+
1159
+ module LineToEol0
1160
+ end
1161
+
1162
+ def _nt_line_to_eol
1163
+ start_index = index
1164
+ if node_cache[:line_to_eol].has_key?(index)
1165
+ cached = node_cache[:line_to_eol][index]
1166
+ @index = cached.interval.end if cached
1167
+ return cached
1168
+ end
1169
+
1170
+ s0, i0 = [], index
1171
+ loop do
1172
+ i1, s1 = index, []
1173
+ i2 = index
1174
+ r3 = _nt_eol
1175
+ if r3
1176
+ r2 = nil
1177
+ else
1178
+ self.index = i2
1179
+ r2 = SyntaxNode.new(input, index...index)
1180
+ end
1181
+ s1 << r2
1182
+ if r2
1183
+ if index < input_length
1184
+ r4 = (SyntaxNode).new(input, index...(index + 1))
1185
+ @index += 1
1186
+ else
1187
+ terminal_parse_failure("any character")
1188
+ r4 = nil
1189
+ end
1190
+ s1 << r4
1191
+ end
1192
+ if s1.last
1193
+ r1 = (SyntaxNode).new(input, i1...index, s1)
1194
+ r1.extend(LineToEol0)
1195
+ else
1196
+ self.index = i1
1197
+ r1 = nil
1198
+ end
1199
+ if r1
1200
+ s0 << r1
1201
+ else
1202
+ break
1203
+ end
1204
+ end
1205
+ r0 = SyntaxNode.new(input, i0...index, s0)
1206
+
1207
+ node_cache[:line_to_eol][start_index] = r0
1208
+
1209
+ return r0
1210
+ end
1211
+
1212
+ module PyString0
1213
+ end
1214
+
1215
+ module PyString1
1216
+ def open_py_string
1217
+ elements[0]
1218
+ end
1219
+
1220
+ def s
1221
+ elements[1]
1222
+ end
1223
+
1224
+ def close_py_string
1225
+ elements[2]
1226
+ end
1227
+ end
1228
+
1229
+ module PyString2
1230
+ def build
1231
+ Ast::PyString.new(open_py_string.line, close_py_string.line, s.text_value, open_py_string.indentation)
1232
+ end
1233
+ end
1234
+
1235
+ def _nt_py_string
1236
+ start_index = index
1237
+ if node_cache[:py_string].has_key?(index)
1238
+ cached = node_cache[:py_string][index]
1239
+ @index = cached.interval.end if cached
1240
+ return cached
1241
+ end
1242
+
1243
+ i0, s0 = index, []
1244
+ r1 = _nt_open_py_string
1245
+ s0 << r1
1246
+ if r1
1247
+ s2, i2 = [], index
1248
+ loop do
1249
+ i3, s3 = index, []
1250
+ i4 = index
1251
+ r5 = _nt_close_py_string
1252
+ if r5
1253
+ r4 = nil
1254
+ else
1255
+ self.index = i4
1256
+ r4 = SyntaxNode.new(input, index...index)
1257
+ end
1258
+ s3 << r4
1259
+ if r4
1260
+ if index < input_length
1261
+ r6 = (SyntaxNode).new(input, index...(index + 1))
1262
+ @index += 1
1263
+ else
1264
+ terminal_parse_failure("any character")
1265
+ r6 = nil
1266
+ end
1267
+ s3 << r6
1268
+ end
1269
+ if s3.last
1270
+ r3 = (SyntaxNode).new(input, i3...index, s3)
1271
+ r3.extend(PyString0)
1272
+ else
1273
+ self.index = i3
1274
+ r3 = nil
1275
+ end
1276
+ if r3
1277
+ s2 << r3
1278
+ else
1279
+ break
1280
+ end
1281
+ end
1282
+ r2 = SyntaxNode.new(input, i2...index, s2)
1283
+ s0 << r2
1284
+ if r2
1285
+ r7 = _nt_close_py_string
1286
+ s0 << r7
1287
+ end
1288
+ end
1289
+ if s0.last
1290
+ r0 = (SyntaxNode).new(input, i0...index, s0)
1291
+ r0.extend(PyString1)
1292
+ r0.extend(PyString2)
1293
+ else
1294
+ self.index = i0
1295
+ r0 = nil
1296
+ end
1297
+
1298
+ node_cache[:py_string][start_index] = r0
1299
+
1300
+ return r0
1301
+ end
1302
+
1303
+ module OpenPyString0
1304
+ def white
1305
+ elements[0]
1306
+ end
1307
+
1308
+ def eol
1309
+ elements[3]
1310
+ end
1311
+ end
1312
+
1313
+ module OpenPyString1
1314
+ def indentation
1315
+ white.text_value.length
1316
+ end
1317
+
1318
+ def line
1319
+ white.line
1320
+ end
1321
+ end
1322
+
1323
+ def _nt_open_py_string
1324
+ start_index = index
1325
+ if node_cache[:open_py_string].has_key?(index)
1326
+ cached = node_cache[:open_py_string][index]
1327
+ @index = cached.interval.end if cached
1328
+ return cached
1329
+ end
1330
+
1331
+ i0, s0 = index, []
1332
+ r1 = _nt_white
1333
+ s0 << r1
1334
+ if r1
1335
+ if input.index('"""', index) == index
1336
+ r2 = (SyntaxNode).new(input, index...(index + 3))
1337
+ @index += 3
1338
+ else
1339
+ terminal_parse_failure('"""')
1340
+ r2 = nil
1341
+ end
1342
+ s0 << r2
1343
+ if r2
1344
+ s3, i3 = [], index
1345
+ loop do
1346
+ r4 = _nt_space
1347
+ if r4
1348
+ s3 << r4
1349
+ else
1350
+ break
1351
+ end
1352
+ end
1353
+ r3 = SyntaxNode.new(input, i3...index, s3)
1354
+ s0 << r3
1355
+ if r3
1356
+ r5 = _nt_eol
1357
+ s0 << r5
1358
+ end
1359
+ end
1360
+ end
1361
+ if s0.last
1362
+ r0 = (SyntaxNode).new(input, i0...index, s0)
1363
+ r0.extend(OpenPyString0)
1364
+ r0.extend(OpenPyString1)
1365
+ else
1366
+ self.index = i0
1367
+ r0 = nil
1368
+ end
1369
+
1370
+ node_cache[:open_py_string][start_index] = r0
1371
+
1372
+ return r0
1373
+ end
1374
+
1375
+ module ClosePyString0
1376
+ def eol
1377
+ elements[0]
1378
+ end
1379
+
1380
+ def quotes
1381
+ elements[2]
1382
+ end
1383
+
1384
+ def white
1385
+ elements[3]
1386
+ end
1387
+ end
1388
+
1389
+ module ClosePyString1
1390
+ def line
1391
+ quotes.line
1392
+ end
1393
+ end
1394
+
1395
+ def _nt_close_py_string
1396
+ start_index = index
1397
+ if node_cache[:close_py_string].has_key?(index)
1398
+ cached = node_cache[:close_py_string][index]
1399
+ @index = cached.interval.end if cached
1400
+ return cached
1401
+ end
1402
+
1403
+ i0, s0 = index, []
1404
+ r1 = _nt_eol
1405
+ s0 << r1
1406
+ if r1
1407
+ s2, i2 = [], index
1408
+ loop do
1409
+ r3 = _nt_space
1410
+ if r3
1411
+ s2 << r3
1412
+ else
1413
+ break
1414
+ end
1415
+ end
1416
+ r2 = SyntaxNode.new(input, i2...index, s2)
1417
+ s0 << r2
1418
+ if r2
1419
+ if input.index('"""', index) == index
1420
+ r4 = (SyntaxNode).new(input, index...(index + 3))
1421
+ @index += 3
1422
+ else
1423
+ terminal_parse_failure('"""')
1424
+ r4 = nil
1425
+ end
1426
+ s0 << r4
1427
+ if r4
1428
+ r5 = _nt_white
1429
+ s0 << r5
1430
+ end
1431
+ end
1432
+ end
1433
+ if s0.last
1434
+ r0 = (SyntaxNode).new(input, i0...index, s0)
1435
+ r0.extend(ClosePyString0)
1436
+ r0.extend(ClosePyString1)
1437
+ else
1438
+ self.index = i0
1439
+ r0 = nil
1440
+ end
1441
+
1442
+ node_cache[:close_py_string][start_index] = r0
1443
+
1444
+ return r0
1445
+ end
1446
+
1447
+ def _nt_white
1448
+ start_index = index
1449
+ if node_cache[:white].has_key?(index)
1450
+ cached = node_cache[:white][index]
1451
+ @index = cached.interval.end if cached
1452
+ return cached
1453
+ end
1454
+
1455
+ s0, i0 = [], index
1456
+ loop do
1457
+ i1 = index
1458
+ r2 = _nt_space
1459
+ if r2
1460
+ r1 = r2
1461
+ else
1462
+ r3 = _nt_eol
1463
+ if r3
1464
+ r1 = r3
1465
+ else
1466
+ self.index = i1
1467
+ r1 = nil
1468
+ end
1469
+ end
1470
+ if r1
1471
+ s0 << r1
1472
+ else
1473
+ break
1474
+ end
1475
+ end
1476
+ r0 = SyntaxNode.new(input, i0...index, s0)
1477
+
1478
+ node_cache[:white][start_index] = r0
1479
+
1480
+ return r0
1481
+ end
1482
+
1483
+ end
1484
+
1485
+ class FeatureParser < Treetop::Runtime::CompiledParser
1486
+ include Feature
1487
+ end
1488
+
1489
+ end
1490
+ end