Skip to content
Browse files

Cuke this app now! Aye aye captain :)

  • Loading branch information...
1 parent 5b6281e commit 963af5f9b3d7f4b492769b029d53483b635102da @olivoil committed Dec 6, 2011
Showing with 58,565 additions and 2 deletions.
  1. +13 −2 Makefile
  2. +5 −0 features/foo.feature
  3. +16 −0 features/step_definitions/sharedSteps.js
  4. +18 −0 features/support/world.js
  5. +2 −0 log/test.log
  6. +1 −0 node_modules/.bin/cucumber.js
  7. +8 −0 node_modules/cucumber/.gitignore
  8. +3 −0 node_modules/cucumber/.gitmodules
  9. +8 −0 node_modules/cucumber/.npmignore
  10. +17 −0 node_modules/cucumber/.travis.yml
  11. +9 −0 node_modules/cucumber/Gemfile
  12. +43 −0 node_modules/cucumber/Gemfile.lock
  13. +5 −0 node_modules/cucumber/Guardfile
  14. +220 −0 node_modules/cucumber/History.md
  15. +22 −0 node_modules/cucumber/LICENSE
  16. +80 −0 node_modules/cucumber/README.md
  17. +21 −0 node_modules/cucumber/Rakefile
  18. +25 −0 node_modules/cucumber/bin/cucumber.js
  19. +1 −0 node_modules/cucumber/cucumber.yml
  20. +108 −0 node_modules/cucumber/example/example.css
  21. +110 −0 node_modules/cucumber/example/example.js
  22. +82 −0 node_modules/cucumber/example/index.html
  23. +13 −0 node_modules/cucumber/example/server.js
  24. +963 −0 node_modules/cucumber/example/vendor/gherkin.en.js
  25. +18 −0 node_modules/cucumber/example/vendor/jquery-1.6.1.min.js
  26. +50 −0 node_modules/cucumber/features/background.feature
  27. +93 −0 node_modules/cucumber/features/cli.feature
  28. +11 −0 node_modules/cucumber/features/coffeescript_support.feature
  29. +3 −0 node_modules/cucumber/features/cucumber-tck/.gitignore
  30. +13 −0 node_modules/cucumber/features/cucumber-tck/README.md
  31. +1 −0 node_modules/cucumber/features/cucumber-tck/background.feature
  32. +1 −0 node_modules/cucumber/features/cucumber-tck/calling_steps_from_step_defs.feature
  33. +1 −0 node_modules/cucumber/features/cucumber-tck/command_line_interface.feature
  34. +1 −0 node_modules/cucumber/features/cucumber-tck/command_line_options.feature
  35. +21 −0 node_modules/cucumber/features/cucumber-tck/comments.feature
  36. +143 −0 node_modules/cucumber/features/cucumber-tck/core.feature
  37. +35 −0 node_modules/cucumber/features/cucumber-tck/data_tables.feature
  38. +24 −0 node_modules/cucumber/features/cucumber-tck/doc_strings.feature
  39. +39 −0 node_modules/cucumber/features/cucumber-tck/failing_steps.feature
  40. +45 −0 node_modules/cucumber/features/cucumber-tck/hooks.feature
  41. +1 −0 node_modules/cucumber/features/cucumber-tck/i18n.feature
  42. +1 −0 node_modules/cucumber/features/cucumber-tck/json_formatter.feature
  43. +1 −0 node_modules/cucumber/features/cucumber-tck/pretty_formatter.feature
  44. +1 −0 node_modules/cucumber/features/cucumber-tck/ruby/rake_task.feature
  45. +1 −0 node_modules/cucumber/features/cucumber-tck/ruby/rspec.feature
  46. +1 −0 node_modules/cucumber/features/cucumber-tck/ruby/test_unit.feature
  47. +1 −0 node_modules/cucumber/features/cucumber-tck/scenario_outlines_and_examples.feature
  48. +1 −0 node_modules/cucumber/features/cucumber-tck/stats_collector.feature
  49. +1 −0 node_modules/cucumber/features/cucumber-tck/step_argument_transforms.feature
  50. +43 −0 node_modules/cucumber/features/cucumber-tck/step_definitions/cucumber_mappings.rb
  51. +187 −0 node_modules/cucumber/features/cucumber-tck/step_definitions/cucumber_stepdefs.rb
  52. +1 −0 node_modules/cucumber/features/cucumber-tck/tags.feature
  53. +105 −0 node_modules/cucumber/features/cucumber-tck/undefined_steps.feature
  54. +1 −0 node_modules/cucumber/features/cucumber-tck/wire_protocol.feature
  55. +27 −0 node_modules/cucumber/features/cucumber-tck/world.feature
  56. +16 −0 node_modules/cucumber/features/legacy/asynchronous_step_definitions-issue_01.feature
  57. +124 −0 node_modules/cucumber/features/legacy/core.feature
  58. +85 −0 node_modules/cucumber/features/step_definitions/calculator_steps.js
  59. +62 −0 node_modules/cucumber/features/step_definitions/cli_steps.js
  60. +221 −0 node_modules/cucumber/features/step_definitions/cucumber_js_mappings.rb
  61. +150 −0 node_modules/cucumber/features/step_definitions/cucumber_steps.js
  62. +19 −0 node_modules/cucumber/features/step_definitions/cucumber_steps.rb
  63. +119 −0 node_modules/cucumber/features/step_definitions/cucumber_world.js
  64. +262 −0 node_modules/cucumber/features/step_definitions/legacy/cucumber_steps.js
  65. +31 −0 node_modules/cucumber/features/support/rpn_calculator.js
  66. +17 −0 node_modules/cucumber/lib/cucumber.js
  67. +9 −0 node_modules/cucumber/lib/cucumber/ast.js
  68. +37 −0 node_modules/cucumber/lib/cucumber/ast/background.js
  69. +34 −0 node_modules/cucumber/lib/cucumber/ast/data_table.js
  70. +11 −0 node_modules/cucumber/lib/cucumber/ast/data_table/row.js
  71. +17 −0 node_modules/cucumber/lib/cucumber/ast/doc_string.js
  72. +67 −0 node_modules/cucumber/lib/cucumber/ast/feature.js
  73. +23 −0 node_modules/cucumber/lib/cucumber/ast/features.js
  74. +58 −0 node_modules/cucumber/lib/cucumber/ast/scenario.js
  75. +131 −0 node_modules/cucumber/lib/cucumber/ast/step.js
  76. +19 −0 node_modules/cucumber/lib/cucumber/cli.js
  77. +89 −0 node_modules/cucumber/lib/cucumber/cli/argument_parser.js
  78. +11 −0 node_modules/cucumber/lib/cucumber/cli/argument_parser/feature_path_expander.js
  79. +37 −0 node_modules/cucumber/lib/cucumber/cli/argument_parser/path_expander.js
  80. +11 −0 node_modules/cucumber/lib/cucumber/cli/argument_parser/support_code_path_expander.js
  81. +24 −0 node_modules/cucumber/lib/cucumber/cli/configuration.js
  82. +21 −0 node_modules/cucumber/lib/cucumber/cli/feature_source_loader.js
  83. +67 −0 node_modules/cucumber/lib/cucumber/cli/support_code_loader.js
  84. +40 −0 node_modules/cucumber/lib/cucumber/debug.js
  85. +96 −0 node_modules/cucumber/lib/cucumber/debug/simple_ast_listener.js
  86. +3 −0 node_modules/cucumber/lib/cucumber/listener.js
  87. +376 −0 node_modules/cucumber/lib/cucumber/listener/progress_formatter.js
  88. +92 −0 node_modules/cucumber/lib/cucumber/parser.js
  89. +40 −0 node_modules/cucumber/lib/cucumber/runtime.js
  90. +187 −0 node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js
  91. +43 −0 node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker/event.js
  92. +13 −0 node_modules/cucumber/lib/cucumber/runtime/failed_step_result.js
  93. +5 −0 node_modules/cucumber/lib/cucumber/runtime/pending_step_exception.js
  94. +9 −0 node_modules/cucumber/lib/cucumber/runtime/pending_step_result.js
  95. +9 −0 node_modules/cucumber/lib/cucumber/runtime/successful_step_result.js
  96. +6 −0 node_modules/cucumber/lib/cucumber/support_code.js
  97. +46 −0 node_modules/cucumber/lib/cucumber/support_code/library.js
  98. +46 −0 node_modules/cucumber/lib/cucumber/support_code/step_definition.js
  99. +105 −0 node_modules/cucumber/lib/cucumber/support_code/step_definition_snippet_builder.js
  100. +4 −0 node_modules/cucumber/lib/cucumber/support_code/world_constructor.js
  101. +4 −0 node_modules/cucumber/lib/cucumber/type.js
  102. +27 −0 node_modules/cucumber/lib/cucumber/type/collection.js
  103. +41 −0 node_modules/cucumber/lib/cucumber/type/hash_data_table.js
  104. +4 −0 node_modules/cucumber/lib/cucumber/util.js
  105. +4 −0 node_modules/cucumber/lib/cucumber/util/arguments.js
  106. +10 −0 node_modules/cucumber/lib/cucumber/util/reg_exp.js
  107. +19 −0 node_modules/cucumber/lib/cucumber/volatile_configuration.js
  108. +46 −0 node_modules/cucumber/package.json
  109. +75 −0 node_modules/cucumber/spec/cucumber/ast/background_spec.js
  110. +19 −0 node_modules/cucumber/spec/cucumber/ast/data_table/row_spec.js
  111. +96 −0 node_modules/cucumber/spec/cucumber/ast/data_table_spec.js
  112. +31 −0 node_modules/cucumber/spec/cucumber/ast/doc_string_spec.js
  113. +217 −0 node_modules/cucumber/spec/cucumber/ast/feature_spec.js
  114. +80 −0 node_modules/cucumber/spec/cucumber/ast/features_spec.js
  115. +196 −0 node_modules/cucumber/spec/cucumber/ast/scenario_spec.js
  116. +556 −0 node_modules/cucumber/spec/cucumber/ast/step_spec.js
  117. +26 −0 node_modules/cucumber/spec/cucumber/cli/argument_parser/feature_path_expander_spec.js
  118. +124 −0 node_modules/cucumber/spec/cucumber/cli/argument_parser/path_expander_spec.js
  119. +38 −0 node_modules/cucumber/spec/cucumber/cli/argument_parser/support_code_path_expander_spec.js
  120. +272 −0 node_modules/cucumber/spec/cucumber/cli/argument_parser_spec.js
  121. +94 −0 node_modules/cucumber/spec/cucumber/cli/configuration_spec.js
  122. +55 −0 node_modules/cucumber/spec/cucumber/cli/feature_source_loader_spec.js
  123. +229 −0 node_modules/cucumber/spec/cucumber/cli/support_code_loader_spec.js
  124. +51 −0 node_modules/cucumber/spec/cucumber/cli_spec.js
  125. +1,743 −0 node_modules/cucumber/spec/cucumber/listener/progress_formatter_spec.js
  126. +408 −0 node_modules/cucumber/spec/cucumber/parser_spec.js
  127. +108 −0 node_modules/cucumber/spec/cucumber/runtime/ast_tree_walker/event_spec.js
  128. +774 −0 node_modules/cucumber/spec/cucumber/runtime/ast_tree_walker_spec.js
  129. +35 −0 node_modules/cucumber/spec/cucumber/runtime/failed_step_result_spec.js
  130. +5 −0 node_modules/cucumber/spec/cucumber/runtime/pending_step_exception_spec.js
  131. +28 −0 node_modules/cucumber/spec/cucumber/runtime/pending_step_result_spec.js
  132. +28 −0 node_modules/cucumber/spec/cucumber/runtime/successful_step_result_spec.js
  133. +124 −0 node_modules/cucumber/spec/cucumber/runtime_spec.js
  134. +179 −0 node_modules/cucumber/spec/cucumber/support_code/library_spec.js
  135. +279 −0 node_modules/cucumber/spec/cucumber/support_code/step_definition_snippet_builder_spec.js
  136. +219 −0 node_modules/cucumber/spec/cucumber/support_code/step_definition_spec.js
  137. +10 −0 node_modules/cucumber/spec/cucumber/support_code/world_constructor_spec.js
  138. +108 −0 node_modules/cucumber/spec/cucumber/type/collection_spec.js
  139. +97 −0 node_modules/cucumber/spec/cucumber/type/hash_data_table_spec.js
  140. +25 −0 node_modules/cucumber/spec/cucumber/util/arguments_spec.js
  141. +73 −0 node_modules/cucumber/spec/cucumber/util/reg_exp_spec.js
  142. +41 −0 node_modules/cucumber/spec/cucumber/volatile_configuration_spec.js
  143. +30 −0 node_modules/cucumber/spec/cucumber_spec.js
  144. +15 −0 node_modules/cucumber/spec/support/configurations_shared_examples.js
  145. +1 −0 node_modules/cucumber/spec/support/initializer_stub1.js
  146. +1 −0 node_modules/cucumber/spec/support/initializer_stub2.js
  147. +1 −0 node_modules/cucumber/spec/support/initializer_stub3.js
  148. +131 −0 node_modules/cucumber/spec/support/spec_helper.js
  149. +9 −0 node_modules/html5/.gitmodules
  150. +2 −0 node_modules/html5/.travis.yml
  151. +19 −0 node_modules/html5/COPYING
  152. +2 −0 node_modules/html5/DOCUMENTATION.md
  153. +12 −0 node_modules/html5/Makefile
  154. +55 −0 node_modules/html5/README.md
  155. +51 −0 node_modules/html5/data/encoding/chardet/test_big5.txt
  156. +10 −0 node_modules/html5/data/encoding/test-yahoo-jp.dat
  157. +394 −0 node_modules/html5/data/encoding/tests1.dat
  158. +114 −0 node_modules/html5/data/encoding/tests2.dat
  159. +4,116 −0 node_modules/html5/data/html-files/aftonbladet.se.html
  160. +416 −0 node_modules/html5/data/html-files/beaconpush.html
  161. +1 −0 node_modules/html5/data/html-files/google-results.htm
  162. +249 −0 node_modules/html5/data/html-files/hostgator-cancel.htm
  163. +2 −0 node_modules/html5/data/html-files/invalid-attr+jq.html
  164. +1 −0 node_modules/html5/data/html-files/invalid-attr.html
  165. +1 −0 node_modules/html5/data/html-files/metatag.html
  166. +1,142 −0 node_modules/html5/data/html-files/nyt.html
  167. +1 −0 node_modules/html5/data/html-files/python-ref-import.htm
  168. +5 −0 node_modules/html5/data/html-files/tag-in-script.html
  169. +1,091 −0 node_modules/html5/data/html-files/techcrunch.html
  170. +1 −0 node_modules/html5/data/html-files/web-apps-old.htm
  171. +34,275 −0 node_modules/html5/data/html-files/web-apps.htm
  172. +501 −0 node_modules/html5/data/sanitizer/tests1.dat
  173. +125 −0 node_modules/html5/data/serializer/core.test
  174. +66 −0 node_modules/html5/data/serializer/injectmeta.test
  175. +965 −0 node_modules/html5/data/serializer/optionaltags.test
  176. +60 −0 node_modules/html5/data/serializer/options.test
  177. +51 −0 node_modules/html5/data/serializer/whitespace.test
  178. +43 −0 node_modules/html5/data/sniffer/htmlOrFeed.json
  179. +75 −0 node_modules/html5/data/tokenizer/contentModelFlags.test
  180. +2,343 −0 node_modules/html5/data/tokenizer/entities.test
  181. +33 −0 node_modules/html5/data/tokenizer/escapeFlag.test
Sorry, we could not display the entire diff because too many files (659) changed.
View
15 Makefile
@@ -2,14 +2,24 @@ MOCHA_REPORTER = spec
UNIT_TESTS = $(shell find test/unit/server -name "*.test.js")
INTEGRATION_TESTS = $(shell find test/integration/ -name "*.test.js")
+# vim => :map ,f :w\|!clear && make cucumber<cr>
cucumber:
- @NODE_ENV=test ./node_modules/.bin/jasmine \
- --require ['test/features']
+ @NODE_ENV=test ./node_modules/.bin/cucumber.js \
+ # -r test/features
+# vim => :map ,i :w\|!clear && make test-integration<cr>
test-integration:
+ @NODE_ENV=test ./node_modules/.bin/mocha \
+ --require should \
+ --require sinon \
+ --reporter $(MOCHA_REPORTER) \
+ --slow 20 \
+ --growl \
+ $(INTEGRATION_TEST)
test-performance:
+# vim => :map ,t :w\|!clear && make test-unit-server<cr>
test-unit-server:
@NODE_ENV=test ./node_modules/.bin/mocha \
--require should \
@@ -19,6 +29,7 @@ test-unit-server:
--growl \
$(UNIT_TESTS)
+# vim => :map ,c :w\|!clear && make test-unit-client<cr>
test-unit-client:
open test/unit/client/SpecRunner.html
View
5 features/foo.feature
@@ -0,0 +1,5 @@
+Feature: Learn Cucumber
+
+ Scenario: Visiting the home page
+ Given I am on the home page
+ Then I should see "express"
View
16 features/step_definitions/sharedSteps.js
@@ -0,0 +1,16 @@
+var World = require('../support/world');
+
+var sharedSteps = function(){
+ var world = this.world = new World();
+
+ this.Given(/^I am on the home page$/, function(callback) {
+ world.visit('/', callback);
+ });
+
+ this.Then(/^I should see "([^"]*)"$/, function(arg1, callback) {
+ // express the regexp above with the code you wish you had
+ callback.pending();
+ });
+}
+
+module.exports = sharedSteps;
View
18 features/support/world.js
@@ -0,0 +1,18 @@
+var zombie = require('zombie')
+ , HTML5 = require('html5')
+ , assert = require('assert')
+ , server = require('../../server');
+
+module.exports = function(){
+ this.browser = new zombie.Browser({runScripts:true, debug:false, htmlParser: HTML5});
+
+ this.page = function(path){
+ return "http://localhost:" + server.app.settings.port + path
+ };
+
+ this.visit = function(path, callback){
+ this.browser.visit( this.page(path), function(err, browser, status){
+ callback(err, browser, status);
+ });
+ };
+};
View
2 log/test.log
@@ -0,0 +1,2 @@
+{"level":"http","message":"Express server listening on port 3000 in test mode"}
+{"level":"http","message":"Express server listening on port 3000 in test mode"}
View
1 node_modules/.bin/cucumber.js
View
8 node_modules/cucumber/.gitignore
@@ -0,0 +1,8 @@
+.DS_Store
+node_modules
+*~
+.#*
+.rvmrc
+doc/
+tmp/
+npm-debug.log
View
3 node_modules/cucumber/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "features/cucumber-tck"]
+ path = features/cucumber-tck
+ url = git://github.com/cucumber/cucumber-tck.git
View
8 node_modules/cucumber/.npmignore
@@ -0,0 +1,8 @@
+.DS_Store
+node_modules
+*~
+.#*
+.rvmrc
+doc/
+tmp/
+Procfile
View
17 node_modules/cucumber/.travis.yml
@@ -0,0 +1,17 @@
+rvm: "1.9.2"
+before_script: "git submodule update --init && npm install"
+script: "rake"
+
+node_js:
+ - 0.4
+ - 0.6
+
+branches:
+ only:
+ - master
+
+notifications:
+ email:
+ - jb@jbpros.com
+ irc:
+ - "irc.freenode.org#cucumber.js"
View
9 node_modules/cucumber/Gemfile
@@ -0,0 +1,9 @@
+source :rubygems
+
+group :test do
+ gem "aruba", "0.4.7"
+end
+
+group :dev do
+ gem "guard-jasmine-node", "0.0.5"
+end
View
43 node_modules/cucumber/Gemfile.lock
@@ -0,0 +1,43 @@
+GEM
+ remote: http://rubygems.org/
+ specs:
+ aruba (0.4.7)
+ childprocess (>= 0.2.2)
+ cucumber (>= 1.1.1)
+ ffi (= 1.0.9)
+ rspec (>= 2.7.0)
+ builder (3.0.0)
+ childprocess (0.2.3)
+ ffi (~> 1.0.6)
+ cucumber (1.1.3)
+ builder (>= 2.1.2)
+ diff-lcs (>= 1.1.2)
+ gherkin (~> 2.6.7)
+ json (>= 1.4.6)
+ term-ansicolor (>= 1.0.6)
+ diff-lcs (1.1.3)
+ ffi (1.0.9)
+ gherkin (2.6.8)
+ json (>= 1.4.6)
+ guard (0.8.2)
+ thor (~> 0.14.6)
+ guard-jasmine-node (0.0.5)
+ guard (>= 0.4)
+ json (1.6.3)
+ rspec (2.7.0)
+ rspec-core (~> 2.7.0)
+ rspec-expectations (~> 2.7.0)
+ rspec-mocks (~> 2.7.0)
+ rspec-core (2.7.1)
+ rspec-expectations (2.7.0)
+ diff-lcs (~> 1.1.2)
+ rspec-mocks (2.7.0)
+ term-ansicolor (1.0.7)
+ thor (0.14.6)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ aruba (= 0.4.7)
+ guard-jasmine-node (= 0.0.5)
View
5 node_modules/cucumber/Guardfile
@@ -0,0 +1,5 @@
+guard 'jasmine-node', :jasmine_node_bin => File.expand_path(File.dirname(__FILE__) + "/node_modules/jasmine-node/bin/jasmine-node") do
+ watch(%r{^spec/(.+)_spec\.js$}) { |m| "spec/#{m[1]}_spec.js" }
+ watch(%r{^lib/(.+)\.js$}) { |m| "spec/#{m[1]}_spec.js" }
+ watch(%r{^spec/support/.+\.js$}) { "spec" }
+end
View
220 node_modules/cucumber/History.md
@@ -0,0 +1,220 @@
+# Cucumber.js changelog
+
+## [v0.2](https://github.com/cucumber/cucumber-js/compare/v0.1.5...master)
+
+
+
+### [v0.2.3](https://github.com/cucumber/cucumber-js/compare/v0.2.2...v0.2.3)
+
+#### New features
+
+* Add support for Node 0.6 (Julien Biezemans)
+
+#### Fixes
+
+* Prevent the same step definition snippet from being suggested twice (Julien Biezemans)
+
+#### Internals and tests
+
+* Don't make NPM ignore example/ anymore
+* Bump cucumber-features (Julien Biezemans)
+* Use non-deprecated "url" key instead of "web" in NPM manifest (Julien Biezemans)
+* Add JS step definitions related to data table scenarios (Julien Biezemans)
+* Move from cucumber-features to cucumber-tck (Julien Biezemans)
+* Bump Gherkin (Julien Biezemans)
+* Bump jasmine-node (Julien Biezemans)
+* Bump connect (Julien Biezemans)
+* Fix Travis build (Julien Biezemans)
+* Bump browserify (Julien Biezemans)
+* Bump nopt (Julien Biezemans)
+* Bump underscore (Julien Biezemans)
+* Bump underscore.string (Julien Biezemans)
+* Bump rimraf (Julien Biezemans)
+* Bump mkdirp (Julien Biezemans)
+* Bump Aruba (Julien Biezemans)
+
+
+
+### [v0.2.2](https://github.com/cucumber/cucumber-js/compare/v0.2.1...v0.2.2)
+
+#### New features
+
+* Suggest step definition snippets for undefined steps (#33 Julien Biezemans)
+
+#### Internals and tests
+
+* Add contributors to NPM package manifest (Julien Biezemans)
+* Clean up JS step definitions (Julien Biezemans)
+* Bump cucumber-features and reflect step changes (Julien Biezemans)
+* Set up [continuous integration on Travis CI](http://travis-ci.org/#!/cucumber/cucumber-js) (Julien Biezemans)
+* Add Travis's build status icon to README (Julien Biezemans)
+
+
+
+### [v0.2.1](https://github.com/cucumber/cucumber-js/compare/v0.2.0...v0.2.1)
+
+#### New features
+
+* Allow custom World constructors (Julien Biezemans)
+* Add support for data tables (with conversion to hashes) (#12 Julien Biezemans)
+
+#### Changed features
+
+* Demonstrate World object usages in web example (Julien Biezemans)
+
+
+
+### [v0.2.0](https://github.com/cucumber/cucumber-js/compare/v0.1.5...v0.2.0)
+
+#### New features
+
+* Setup application to run on [Travis CI](http://travis-ci.org/#!/jbpros/cucumber-js) (Julien Biezemans)
+* Add CoffeeScript support for step definition files (Paul Jensen)
+* Add "World" (#26 Julien Biezemans)
+
+#### Changed features
+
+* Add link to the Github repository on web example (Julien Biezemans)
+* Allow specifying the port the web example server should listen on (Julien Biezemans)
+* Update web example to use cucumber-html formatter (Julien Biezemans)
+
+#### Fixes
+
+* Fix load paths in spec helper (Julien Biezemans)
+* Prevent 'crypto' module from being included by browserify in web example (Julien Biezemans)
+* Fix HTML indentation (Julien Biezemans)
+* Prevent CLI support code loader from calling module main exports which are not functions (Julien Biezemans)
+* Remove use of username for submodule (Kushal Pisavadia)
+
+#### Internals and tests
+
+* Bump jasmine-node
+* Update README (Julien Biezemans)
+* Bump Gherkin twice (Julien Biezemans)
+* Bump cucumber-features twice (Julien Biezemans)
+* Add missing getters on several AST feature elements (mostly getLine()) (Julien Biezemans)
+* Ignore example/ on NPM (Julien Biezemans)
+* Add Procfile (used by Heroku when deploying to cucumber.heroku.com) (Julien Biezemans)
+* Bump Aruba (Julien Biezemans)
+* Add guard-jasmine-node (Julien Biezemans)
+* Improve Guardfile regular expressions (Julien Biezemans)
+* Bump cucumber-html and remove DOM templates from web example HTML file (Julien Biezemans)
+* Fix PathExpander internal name (Julien Biezemans)
+* Remove unneeded requires from FeaturePathExpander (Julien Biezemans)
+* Bump browserify (Julien Biezemans)
+* Remove "glob" from dependencies (Julien Biezemans)
+* Refactor SupportCodePathExpander spec (Julien Biezemans)
+* Add feature for CoffeeScript support (#29 Julien Biezemans)
+
+
+
+## [v0.1](https://github.com/cucumber/cucumber-js/compare/v0.0.1...v0.1.5)
+
+### [v0.1.5](https://github.com/cucumber/cucumber-js/compare/v0.1.4...v0.1.5)
+
+#### New features
+
+* Add support for background (#9 Julien Biezemans)
+
+#### Internals and tests
+
+* Bump cucumber-features (twice) (Julien Biezemans)
+* Bump gherkin and reflect changes in its API (add DocString content type) (Julien Biezemans)
+
+
+
+### [v0.1.4](https://github.com/cucumber/cucumber-js/compare/v0.1.3...v0.1.4)
+
+#### Changed features
+
+* Stop polluting the global namespace with Given(), When() and Then() (#2 Julien Biezemans)
+* Step definitions can be created with the support code helper passed as 'this':
+ this.Given(), this.When(), this.Then() and this.defineStep() (#2 Julien Biezemans)
+
+#### Internals and tests
+
+* Fix typo "occured" -> "occurred" (Fernando Acorreia)
+* Improve variable names in CLI support code loader (Julien Biezemans)
+
+
+
+### [v0.1.3](https://github.com/cucumber/cucumber-js/compare/v0.1.2...v0.1.3)
+
+#### New features
+
+* Allow several features to run at once (#14 Julien Biezemans)
+* Add support for --require (Julien Biezemans)
+
+#### Internals and tests
+
+* Improve features and support code API (Julien Biezemans)
+* Add "Cli" and "Volatile" configurations (Julien Biezemans)
+* Internal refactoring and cleanup (Julien Biezemans)
+* Cucumber.js can now fully test itself (Julien Biezemans)
+* Remove run_all_features script in favor of bin/cucumber.js (Julien Biezemans)
+
+
+
+### [v0.1.2](https://github.com/cucumber/cucumber-js/compare/v0.1.1...v0.1.2)
+
+#### New features
+
+* Add failure reporting to the progress formatter (#20 Julien Biezemans)
+
+
+
+### [v0.1.1](https://github.com/cucumber/cucumber-js/compare/v0.1.0...v0.1.1)
+
+#### New features
+
+* Publish Cucumber.js to NPM as [`cucumber`](http://search.npmjs.org/#/cucumber) (Julien Biezemans)
+
+#### Changed features
+
+* Throw a clearer exception on missing feature argument (CLI) (Julien Biezemans)
+
+#### Internals and tests
+
+* Unify and clean up js-specific features and step definitions (#21 Julien Biezemans)
+
+
+
+### [v0.1.0](https://github.com/cucumber/cucumber-js/compare/v0.0.1...v0.1.0)
+
+#### New features
+
+* Add cucumber.js executable (Julien Biezemans)
+* Handle step failures (#6 Julien Biezemans)
+* Add the progress formatter (#16 Julien Biezemans)
+* Add support for pending steps (#18 Julien Biezemans)
+* Add support for undefined steps (#19 Julien Biezemans)
+
+#### Changed features
+
+* Update web example to use the new progress formatter (Julien Biezemans)
+
+#### Fixes
+
+* Fix asynchronous step definition callbacks (#1 Julien Biezemans)
+* Fix stepResult.isSuccessful call in ProgressFormatter (Julien Biezemans)
+* Load Gherkin properly in browsers (Julien Biezemans)
+* Remove calls to console.log in web example (Julien Biezemans)
+
+#### Internals and tests
+
+* Pass against core.feature in its new form, both with the Cucumber-ruby/Aruba pair and cucumber-js itself (Julien Biezemans)
+* Refactor cucumber-features JS mappings (Julien Biezemans)
+* Refactor js-specific features (Julien Biezemans)
+* Rename PyString to DocString (#15 Julien Biezemans)
+* Update Gherkin to 2.4.0 (Julien Biezemans)
+* Modularize the project and use browserify.js to serve a single JS file to browsers. (#3 Julien Biezemans)
+* Rename Cucumber.Types to Cucumber.Type (Julien Biezemans)
+* Use progress formatter in cucumber-features (#17 Julien Biezemans)
+
+
+
+## [v0.0](https://github.com/cucumber/cucumber-js/tree/v0.0.1)
+
+### [v0.0.1](https://github.com/cucumber/cucumber-js/tree/v0.0.1)
+
+* Emerge Cucumber.js with bare support for features, scenarios and steps. It does not handle several Gherkin elements nor failures yet. (Julien Biezemans)
View
22 node_modules/cucumber/LICENSE
@@ -0,0 +1,22 @@
+The MIT License
+
+Copyright (c) 2011 Julien Biezemans
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
View
80 node_modules/cucumber/README.md
@@ -0,0 +1,80 @@
+# Cucumber.js [![Build Status](https://secure.travis-ci.org/cucumber/cucumber-js.png)](http://travis-ci.org/cucumber/cucumber-js)
+
+Cucumber brought (natively) to your JavaScript stack.
+
+It can run basic fatures inside both Node.js and web browsers.
+
+It still needs a lot of work. Only a few feature elements are supported at the moment.
+
+## Prerequesites
+
+* Node.js 0.4.8 (tested on 0.4.7 too)
+* npm 1.0.6
+
+### Works on
+
+* Node.js 0.4, 0.5, 0.6
+* Google Chrome 13.0.772.0 (dev)
+* Firefox 4.0.1
+* Safari 5.0.5
+
+And probably lots of other browsers.
+
+## Setup for using in Node.js and running tests
+
+Install the required dependencies:
+
+ $ npm link
+
+## Play with it!
+
+ $ node example/server.js
+
+Then go to [localhost:9797](http://localhost:9797/).
+
+## Run tests
+
+### Specs
+
+ $ node_modules/.bin/jasmine-node spec
+
+### Features & documentation
+
+There is a common set of features shared by all cucumber implementations. It's called the *Technology Compatibility Kit* or *TCK*. Find more on the [cucumber-tck](http://github.com/cucumber/cucumber-tck) repository.
+
+The official way of running them is through Cucumber-ruby and Aruba. Ruby and Bundler are required for this to work.
+
+ $ git submodule update --init
+ $ bundle
+ $ rm -rf doc; ARUBA_REPORT_DIR=doc cucumber features/cucumber-tck -r features
+
+You can then open the generated documentation:
+
+ $ open doc/features/cucumber-tck/*.html # might open a lot of files ;)
+
+In addition to that, Cucumber.js is able to run the features for itself too:
+
+ $ ./bin/cucumber.js features/cucumber-tck -r features
+
+There are a few other Cucumber.js-dependent features. Execute everything:
+
+ $ ./bin/cucumber.js
+
+### Rake
+
+Alternatively, you can run everything with the help of Rake:
+
+ $ git submodule update --init
+ $ bundle
+ $ rake
+
+### Debug messages
+
+You can display debug messages by setting the DEBUG_LEVEL environment variable. It goes from `1` to `5`. `5` will diplay everything, `1` will only print out the critical things.
+
+ $ DEBUG_LEVEL=5 ./bin/cucumber.js
+
+It even works with Aruba:
+
+ $ rm -rf doc; DEBUG_LEVEL=5 ARUBA_REPORT_DIR=doc cucumber features/cucumber-tck -r features
+ $ open doc/features/cucumber-tck/*.html # you'll see debug messages in Aruba-generated docs
View
21 node_modules/cucumber/Rakefile
@@ -0,0 +1,21 @@
+task :default => [:test]
+
+desc "Run all tests"
+task :test => "test:all"
+
+namespace :test do
+
+ desc "Run all tests"
+ task :all => [ "test:rb", "test:js" ]
+
+ desc "Run the features through Cucumber (Ruby) and Aruba"
+ task :rb do
+ sh %{ cucumber -p quiet }
+ end
+
+ desc "Run the features through Cucumber.js and the specs through Jasmine-node"
+ task :js do
+ sh %{ npm test }
+ end
+
+end
View
25 node_modules/cucumber/bin/cucumber.js
@@ -0,0 +1,25 @@
+#!/usr/bin/env node
+var Cucumber = require('../lib/cucumber');
+var cli = Cucumber.Cli(process.argv);
+cli.run(function(succeeded) {
+ var code = succeeded ? 0 : 1;
+ var exitFunction = function() {
+ process.exit(code);
+ };
+
+ // --- exit after waiting for all pending output ---
+ var waitingIO = false;
+ process.stdout.on('drain', function() {
+ if (waitingIO) {
+ // the kernel buffer is now empty
+ exitFunction();
+ }
+ });
+ if (process.stdout.write("")) {
+ // no buffer left, exit now:
+ exitFunction();
+ } else {
+ // write() returned false, kernel buffer is not empty yet...
+ waitingIO = true;
+ }
+});
View
1 node_modules/cucumber/cucumber.yml
@@ -0,0 +1 @@
+quiet: -f progress --no-snippets
View
108 node_modules/cucumber/example/example.css
@@ -0,0 +1,108 @@
+html, body {
+ margin:1em;
+ min-height:100%;
+ font-family:helvetica, arial, freesans, clean, sans-serif;
+ font-size:.95em;
+}
+
+#feature, #step-definitions, #output, #errors {
+ width:700px;
+ font-family:'Bitstream Vera Sans Mono', Courier, monospace;
+ font-size:1em;
+}
+
+#feature {
+ height:16em;
+}
+
+#step-definitions {
+ height:28em;
+}
+
+#errors {
+ color: #a30;
+}
+
+/* html formatter */
+
+.cucumber-report .keyword {
+ font-weight: bold;
+}
+
+.cucumber-report .description {
+ font-style: italic;
+ margin-left: 20px;
+}
+
+.cucumber-report details > section {
+ margin-left: 20px;
+}
+
+.cucumber-report ol.steps {
+ list-style-type: none;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.cucumber-report .doc_string {
+ margin: 0 0 0 20px;
+}
+
+.cucumber-report table {
+ border-collapse: collapse;
+ border: 1px;
+ border-style: solid;
+}
+
+.cucumber-report td, .cucumber-report th {
+ border: 1px;
+ border-style: solid;
+ padding-left: 4px;
+ padding-right: 4px;
+}
+
+.cucumber-report table {
+ margin-left: 20px;
+}
+
+.cucumber-report thead {
+ background-color: #C0C0C0;
+}
+
+.cucumber-report .passed {
+ background-color: #C5D88A;
+}
+
+.cucumber-report .undefined, .cucumber-report .pending {
+ background-color: #EAEC2D;
+}
+
+.cucumber-report .skipped {
+ background-color: #2DEAEC;
+}
+
+.cucumber-report .failed {
+ background-color: #D88A8A;
+}
+
+.cucumber-report .tags {
+ display: inline;
+}
+
+.cucumber-report .tag {
+ margin-right: 0.25em;
+ color: #246ac1;
+}
+
+.cucumber-report .comments {
+ display: inline;
+}
+
+.cucumber-report .comment {
+ margin 0;
+ padding 0;
+}
+
+#cucumber-templates {
+ display: none;
+}
View
110 node_modules/cucumber/example/example.js
@@ -0,0 +1,110 @@
+(function($) {
+ var CucumberHTMLListener = function($root) {
+ var CucumberHTML = require('cucumber-html');
+ var formatter = new CucumberHTML.DOMFormatter($root);
+
+ formatter.uri('report.feature');
+
+ var currentStep;
+
+ var self = {
+ hear: function hear(event, callback) {
+ var eventName = event.getName();
+ switch (eventName) {
+ case 'BeforeFeature':
+ var feature = event.getPayloadItem('feature');
+ formatter.feature({
+ keyword : feature.getKeyword(),
+ name : feature.getName(),
+ line : feature.getLine(),
+ description : feature.getDescription()
+ });
+ break;
+
+ case 'BeforeScenario':
+ var scenario = event.getPayloadItem('scenario');
+ formatter.scenario({
+ keyword : scenario.getKeyword(),
+ name : scenario.getName(),
+ line : scenario.getLine(),
+ description : scenario.getDescription()
+ });
+ break;
+
+ case 'BeforeStep':
+ var step = event.getPayloadItem('step');
+ self.handleAnyStep(step);
+ break;
+
+ case 'StepResult':
+ var result;
+ var stepResult = event.getPayloadItem('stepResult');
+ if (stepResult.isSuccessful()) {
+ result = {status: 'passed'};
+ } else if (stepResult.isPending()) {
+ result = {status: 'pending'};
+ } else {
+ var error = stepResult.getFailureException();
+ var errorMessage = error.stack || error;
+ result = {status: 'failed', error_message: errorMessage};
+ }
+ formatter.match({uri:'report.feature', step: {line: currentStep.getLine()}});
+ formatter.result(result);
+ break;
+
+ case 'UndefinedStep':
+ case 'SkippedStep':
+ var step = event.getPayloadItem('step');
+ self.handleAnyStep(step);
+ formatter.match({uri:'report.feature', step: {line: step.getLine()}});
+ formatter.result({status:'skipped'});
+ break;
+ }
+ callback();
+ },
+
+ handleAnyStep: function handleAnyStep(step) {
+ formatter.step({
+ keyword : step.getKeyword(),
+ name : step.getName(),
+ line : step.getLine(),
+ });
+ currentStep = step;
+ }
+ };
+ return self;
+ };
+
+ function runFeature() {
+ var Cucumber = require('./cucumber');
+ var supportCode;
+ var output = $('#output');
+ var errors = $('#errors');
+ var errorsContainer = $('#errors-container');
+ var featureSource = $('#feature').val();
+ eval('supportCode = function() {' + $('#step-definitions').val() + '};');
+ var cucumber = Cucumber(featureSource, supportCode);
+ var $output = $('#output');
+ $output.empty();
+ var listener = CucumberHTMLListener($output);
+ cucumber.attachListener(listener);
+
+ errors.text('');
+ errorsContainer.hide();
+ try {
+ cucumber.start(function() {});
+ } catch(err) {
+ errorsContainer.show();
+ var errMessage = err.message || err;
+ var buffer = (errors.text() == '' ? errMessage : errors.text() + "\n\n" + errMessage);
+ errors.text(buffer);
+ throw err;
+ };
+ };
+
+ $(function() {
+ Gherkin = { Lexer: function() { return Lexer; } };
+ $('#run-feature').click(runFeature);
+ $('#errors-container').hide();
+ });
+})(jQuery);
View
82 node_modules/cucumber/example/index.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <title>Cucumber.js</title>
+ <link href="example.css" rel="stylesheet" type="text/css"/>
+ <script type="text/javascript" src="vendor/jquery-1.6.1.min.js"></script>
+ <script type="text/javascript" src="/browserify.js"></script>
+ <script type="text/javascript" src="/example.js"></script>
+ </head>
+ <body>
+ <h1><a href="https://github.com/cucumber/cucumber-js">Cucumber.js</a> demo</h1>
+ <p>Find more on the <a href="https://github.com/cucumber/cucumber-js">Cucumber.js repository</a>.</p>
+ <h2>Feature source</h2>
+ <textarea id="feature">Feature: Simple maths
+ In order to do maths
+ As a developer
+ I want to increment variables
+
+ Scenario: easy maths
+ Given a variable set to 1
+ When I increment the variable by 1
+ Then the variable should contain 2
+
+ Scenario: much more complex stuff
+ Given a variable set to 100
+ When I increment the variable by 6
+ Then the variable should contain 106</textarea>
+ <h2>Step definitions</h2>
+ <textarea id="step-definitions">///// Your World /////
+
+// Provide a custom World constructor. It's optional, a default one is supplied.
+this.World = function() {};
+
+// Define your World!
+
+this.World.prototype.variable = 0;
+
+this.World.prototype.setTo = function(number) {
+ this.variable = parseInt(number);
+};
+
+this.World.prototype.incrementBy = function(number) {
+ this.variable += parseInt(number);
+};
+
+///// Your step definitions /////
+
+// use this.Given(), this.When() and this.Then() to declare step definitions
+
+// Alternatively you can use this.defineStep and even use it
+// like this:
+
+var Given = When = Then = this.defineStep;
+
+Given(/^a variable set to (\d+)$/, function(number, callback) {
+ this.setTo(number);
+ callback();
+});
+
+When(/^I increment the variable by (\d+)$/, function(number, callback) {
+ this.incrementBy(number);
+ callback();
+});
+
+Then(/^the variable should contain (\d+)$/, function(number, callback) {
+ if (this.variable != parseInt(number))
+ throw(new Error('Variable should contain ' + number +
+ ' but it contains ' + this.variable + '.'));
+ callback();
+});</textarea>
+
+ <h2>Output</h2>
+ <p><button id="run-feature">Run feature</button></p>
+ <div id="output" class="cucumber-report"></div>
+ <div id="errors-container">
+ <h3>Errors</h3>
+ <pre id="errors"></pre>
+ </div>
+ </body>
+</html>
View
13 node_modules/cucumber/example/server.js
@@ -0,0 +1,13 @@
+var connect = require('connect');
+var server = connect.createServer();
+
+server.use(connect.static(__dirname));
+server.use(require('browserify')({
+ require: ['cucumber-html',
+ {'cucumber': './lib/cucumber.js'},
+ {'./gherkin/lexer/en': 'gherkin/lib/gherkin/lexer/en'}],
+ ignore: ['./cucumber/cli', 'connect']
+}));
+var port = process.env.PORT || 9797;
+server.listen(port);
+console.log('Accepting connection on port '+port+'...');
View
963 node_modules/cucumber/example/vendor/gherkin.en.js
@@ -0,0 +1,963 @@
+
+/* line 1 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+;(function() {
+
+
+/* line 117 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+
+
+/* line 11 "js/lib/gherkin/lexer/i18n/en.js" */
+const _lexer_actions = [
+ 0, 1, 0, 1, 1, 1, 2, 1,
+ 3, 1, 4, 1, 5, 1, 6, 1,
+ 7, 1, 8, 1, 9, 1, 10, 1,
+ 11, 1, 14, 1, 15, 1, 16, 1,
+ 17, 1, 18, 1, 19, 1, 20, 1,
+ 21, 2, 2, 16, 2, 11, 0, 2,
+ 12, 13, 2, 15, 0, 2, 15, 1,
+ 2, 15, 14, 2, 15, 17, 2, 16,
+ 4, 2, 16, 5, 2, 16, 6, 2,
+ 16, 7, 2, 16, 8, 2, 16, 14,
+ 2, 18, 19, 2, 20, 0, 2, 20,
+ 1, 2, 20, 14, 2, 20, 17, 3,
+ 3, 12, 13, 3, 9, 12, 13, 3,
+ 10, 12, 13, 3, 11, 12, 13, 3,
+ 12, 13, 16, 3, 15, 12, 13, 4,
+ 2, 12, 13, 16, 4, 15, 0, 12,
+ 13
+];
+
+const _lexer_key_offsets = [
+ 0, 0, 19, 37, 38, 39, 43, 48,
+ 53, 58, 63, 67, 71, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 92,
+ 97, 104, 109, 110, 111, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 139, 141, 143, 145, 147, 149, 151,
+ 153, 155, 157, 159, 161, 163, 165, 167,
+ 169, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 204, 206, 208, 210,
+ 212, 214, 216, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 238, 240, 242,
+ 244, 246, 248, 250, 252, 254, 256, 258,
+ 260, 262, 264, 266, 268, 270, 272, 274,
+ 276, 278, 280, 282, 284, 286, 288, 290,
+ 292, 294, 296, 298, 300, 302, 304, 306,
+ 308, 310, 312, 314, 316, 318, 320, 322,
+ 324, 326, 330, 333, 335, 337, 339, 341,
+ 343, 345, 347, 349, 351, 353, 355, 356,
+ 357, 358, 359, 360, 361, 362, 363, 364,
+ 365, 366, 369, 371, 372, 373, 374, 375,
+ 376, 377, 378, 379, 380, 395, 397, 399,
+ 401, 403, 405, 407, 409, 411, 413, 415,
+ 417, 419, 421, 423, 425, 427, 429, 431,
+ 433, 435, 437, 439, 441, 443, 445, 447,
+ 449, 451, 453, 455, 457, 459, 461, 463,
+ 465, 467, 469, 471, 472, 473, 474, 475,
+ 476, 477, 478, 479, 494, 496, 498, 500,
+ 502, 504, 506, 508, 510, 512, 514, 516,
+ 518, 520, 522, 524, 526, 528, 531, 533,
+ 535, 537, 539, 541, 543, 545, 547, 549,
+ 551, 553, 555, 557, 559, 561, 563, 565,
+ 567, 569, 571, 573, 575, 577, 579, 581,
+ 583, 585, 588, 591, 593, 595, 597, 599,
+ 601, 603, 605, 607, 609, 611, 613, 615,
+ 616, 620, 626, 629, 631, 637, 655, 657,
+ 659, 661, 663, 665, 667, 669, 671, 673,
+ 675, 677, 679, 681, 683, 685, 687, 689,
+ 691, 693, 695, 697, 699, 702, 705, 707,
+ 709, 711, 713, 715, 717, 719, 721, 723,
+ 725, 727, 729, 730, 731, 732
+];
+
+const _lexer_trans_keys = [
+ 10, 32, 34, 35, 37, 42, 64, 65,
+ 66, 69, 70, 71, 83, 84, 87, 124,
+ 239, 9, 13, 10, 32, 34, 35, 37,
+ 42, 64, 65, 66, 69, 70, 71, 83,
+ 84, 87, 124, 9, 13, 34, 34, 10,
+ 32, 9, 13, 10, 32, 34, 9, 13,
+ 10, 32, 34, 9, 13, 10, 32, 34,
+ 9, 13, 10, 32, 34, 9, 13, 10,
+ 32, 9, 13, 10, 32, 9, 13, 10,
+ 13, 10, 95, 70, 69, 65, 84, 85,
+ 82, 69, 95, 69, 78, 68, 95, 37,
+ 32, 10, 10, 13, 13, 32, 64, 9,
+ 10, 9, 10, 13, 32, 64, 11, 12,
+ 10, 32, 64, 9, 13, 110, 100, 97,
+ 117, 99, 107, 103, 114, 111, 117, 110,
+ 100, 58, 10, 10, 10, 32, 35, 37,
+ 42, 64, 65, 66, 70, 71, 83, 84,
+ 87, 9, 13, 10, 95, 10, 70, 10,
+ 69, 10, 65, 10, 84, 10, 85, 10,
+ 82, 10, 69, 10, 95, 10, 69, 10,
+ 78, 10, 68, 10, 95, 10, 37, 10,
+ 32, 10, 32, 34, 35, 37, 42, 64,
+ 65, 66, 69, 70, 71, 83, 84, 87,
+ 124, 9, 13, 120, 97, 109, 112, 108,
+ 101, 115, 58, 10, 10, 10, 32, 35,
+ 70, 124, 9, 13, 10, 101, 10, 97,
+ 10, 116, 10, 117, 10, 114, 10, 101,
+ 10, 58, 101, 97, 116, 117, 114, 101,
+ 58, 10, 10, 10, 32, 35, 37, 64,
+ 66, 69, 70, 83, 9, 13, 10, 95,
+ 10, 70, 10, 69, 10, 65, 10, 84,
+ 10, 85, 10, 82, 10, 69, 10, 95,
+ 10, 69, 10, 78, 10, 68, 10, 95,
+ 10, 37, 10, 97, 10, 99, 10, 107,
+ 10, 103, 10, 114, 10, 111, 10, 117,
+ 10, 110, 10, 100, 10, 58, 10, 120,
+ 10, 97, 10, 109, 10, 112, 10, 108,
+ 10, 101, 10, 115, 10, 101, 10, 97,
+ 10, 116, 10, 117, 10, 114, 10, 101,
+ 10, 99, 10, 101, 10, 110, 10, 97,
+ 10, 114, 10, 105, 10, 111, 10, 32,
+ 58, 115, 10, 79, 84, 10, 117, 10,
+ 116, 10, 108, 10, 105, 10, 110, 10,
+ 101, 10, 109, 10, 112, 10, 108, 10,
+ 97, 10, 116, 105, 118, 101, 110, 99,
+ 101, 110, 97, 114, 105, 111, 32, 58,
+ 115, 79, 84, 117, 116, 108, 105, 110,
+ 101, 58, 10, 10, 10, 32, 35, 37,
+ 42, 64, 65, 66, 70, 71, 83, 84,
+ 87, 9, 13, 10, 95, 10, 70, 10,
+ 69, 10, 65, 10, 84, 10, 85, 10,
+ 82, 10, 69, 10, 95, 10, 69, 10,
+ 78, 10, 68, 10, 95, 10, 37, 10,
+ 32, 10, 110, 10, 100, 10, 117, 10,
+ 116, 10, 101, 10, 97, 10, 116, 10,
+ 117, 10, 114, 10, 101, 10, 58, 10,
+ 105, 10, 118, 10, 101, 10, 110, 10,
+ 99, 10, 101, 10, 110, 10, 97, 10,
+ 114, 10, 105, 10, 111, 10, 104, 101,
+ 109, 112, 108, 97, 116, 10, 10, 10,
+ 32, 35, 37, 42, 64, 65, 66, 70,
+ 71, 83, 84, 87, 9, 13, 10, 95,
+ 10, 70, 10, 69, 10, 65, 10, 84,
+ 10, 85, 10, 82, 10, 69, 10, 95,
+ 10, 69, 10, 78, 10, 68, 10, 95,
+ 10, 37, 10, 32, 10, 110, 10, 100,
+ 10, 97, 117, 10, 99, 10, 107, 10,
+ 103, 10, 114, 10, 111, 10, 117, 10,
+ 110, 10, 100, 10, 58, 10, 116, 10,
+ 101, 10, 97, 10, 116, 10, 117, 10,
+ 114, 10, 101, 10, 105, 10, 118, 10,
+ 101, 10, 110, 10, 99, 10, 101, 10,
+ 110, 10, 97, 10, 114, 10, 105, 10,
+ 111, 10, 32, 58, 10, 79, 84, 10,
+ 117, 10, 116, 10, 108, 10, 105, 10,
+ 110, 10, 101, 10, 109, 10, 112, 10,
+ 108, 10, 97, 10, 116, 10, 104, 104,
+ 32, 124, 9, 13, 10, 32, 92, 124,
+ 9, 13, 10, 92, 124, 10, 92, 10,
+ 32, 92, 124, 9, 13, 10, 32, 34,
+ 35, 37, 42, 64, 65, 66, 69, 70,
+ 71, 83, 84, 87, 124, 9, 13, 10,
+ 110, 10, 100, 10, 117, 10, 116, 10,
+ 101, 10, 97, 10, 116, 10, 117, 10,
+ 114, 10, 101, 10, 58, 10, 105, 10,
+ 118, 10, 101, 10, 110, 10, 99, 10,
+ 101, 10, 110, 10, 97, 10, 114, 10,
+ 105, 10, 111, 10, 32, 58, 10, 79,
+ 84, 10, 117, 10, 116, 10, 108, 10,
+ 105, 10, 110, 10, 101, 10, 109, 10,
+ 112, 10, 108, 10, 97, 10, 116, 10,
+ 104, 116, 187, 191, 0
+];
+
+const _lexer_single_lengths = [
+ 0, 17, 16, 1, 1, 2, 3, 3,
+ 3, 3, 2, 2, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 3,
+ 5, 3, 1, 1, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 13, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 16, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 5, 2, 2, 2, 2,
+ 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 9, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 4, 3, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 3, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 13, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 13, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 3, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 3, 3, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 1,
+ 2, 4, 3, 2, 4, 16, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 3, 3, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 1, 1, 1, 0
+];
+
+const _lexer_range_lengths = [
+ 0, 1, 1, 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1,
+ 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 0, 0, 1, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0
+];
+
+const _lexer_index_offsets = [
+ 0, 0, 19, 37, 39, 41, 45, 50,
+ 55, 60, 65, 69, 73, 76, 78, 80,
+ 82, 84, 86, 88, 90, 92, 94, 96,
+ 98, 100, 102, 104, 106, 108, 110, 113,
+ 118, 125, 130, 132, 134, 137, 139, 141,
+ 143, 145, 147, 149, 151, 153, 155, 157,
+ 159, 174, 177, 180, 183, 186, 189, 192,
+ 195, 198, 201, 204, 207, 210, 213, 216,
+ 219, 237, 239, 241, 243, 245, 247, 249,
+ 251, 253, 255, 257, 264, 267, 270, 273,
+ 276, 279, 282, 285, 287, 289, 291, 293,
+ 295, 297, 299, 301, 303, 314, 317, 320,
+ 323, 326, 329, 332, 335, 338, 341, 344,
+ 347, 350, 353, 356, 359, 362, 365, 368,
+ 371, 374, 377, 380, 383, 386, 389, 392,
+ 395, 398, 401, 404, 407, 410, 413, 416,
+ 419, 422, 425, 428, 431, 434, 437, 440,
+ 443, 446, 451, 455, 458, 461, 464, 467,
+ 470, 473, 476, 479, 482, 485, 488, 490,
+ 492, 494, 496, 498, 500, 502, 504, 506,
+ 508, 510, 514, 517, 519, 521, 523, 525,
+ 527, 529, 531, 533, 535, 550, 553, 556,
+ 559, 562, 565, 568, 571, 574, 577, 580,
+ 583, 586, 589, 592, 595, 598, 601, 604,
+ 607, 610, 613, 616, 619, 622, 625, 628,
+ 631, 634, 637, 640, 643, 646, 649, 652,
+ 655, 658, 661, 664, 666, 668, 670, 672,
+ 674, 676, 678, 680, 695, 698, 701, 704,
+ 707, 710, 713, 716, 719, 722, 725, 728,
+ 731, 734, 737, 740, 743, 746, 750, 753,
+ 756, 759, 762, 765, 768, 771, 774, 777,
+ 780, 783, 786, 789, 792, 795, 798, 801,
+ 804, 807, 810, 813, 816, 819, 822, 825,
+ 828, 831, 835, 839, 842, 845, 848, 851,
+ 854, 857, 860, 863, 866, 869, 872, 875,
+ 877, 881, 887, 891, 894, 900, 918, 921,
+ 924, 927, 930, 933, 936, 939, 942, 945,
+ 948, 951, 954, 957, 960, 963, 966, 969,
+ 972, 975, 978, 981, 984, 988, 992, 995,
+ 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019,
+ 1022, 1025, 1028, 1030, 1032, 1034
+];
+
+const _lexer_indicies = [
+ 2, 1, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 14, 15,
+ 16, 1, 0, 2, 1, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 14, 15, 1, 0, 17, 0, 18,
+ 0, 19, 18, 18, 0, 22, 21, 23,
+ 21, 20, 26, 25, 27, 25, 24, 26,
+ 25, 28, 25, 24, 26, 25, 29, 25,
+ 24, 31, 30, 30, 0, 2, 32, 32,
+ 0, 34, 35, 33, 2, 0, 36, 0,
+ 37, 0, 38, 0, 39, 0, 40, 0,
+ 41, 0, 42, 0, 43, 0, 44, 0,
+ 45, 0, 46, 0, 47, 0, 48, 0,
+ 49, 0, 50, 0, 0, 51, 53, 54,
+ 52, 0, 0, 0, 0, 55, 56, 57,
+ 56, 56, 59, 58, 55, 2, 60, 7,
+ 60, 0, 61, 0, 62, 0, 63, 64,
+ 0, 65, 0, 66, 0, 67, 0, 68,
+ 0, 69, 0, 70, 0, 71, 0, 72,
+ 0, 73, 0, 75, 74, 77, 76, 77,
+ 78, 79, 80, 81, 79, 82, 83, 84,
+ 85, 86, 87, 87, 78, 76, 77, 88,
+ 76, 77, 89, 76, 77, 90, 76, 77,
+ 91, 76, 77, 92, 76, 77, 93, 76,
+ 77, 94, 76, 77, 95, 76, 77, 96,
+ 76, 77, 97, 76, 77, 98, 76, 77,
+ 99, 76, 77, 100, 76, 77, 101, 76,
+ 77, 102, 76, 104, 103, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 116, 117, 103, 0, 118, 0, 119,
+ 0, 120, 0, 121, 0, 122, 0, 123,
+ 0, 124, 0, 125, 0, 127, 126, 129,
+ 128, 129, 130, 131, 132, 131, 130, 128,
+ 129, 133, 128, 129, 134, 128, 129, 135,
+ 128, 129, 136, 128, 129, 137, 128, 129,
+ 138, 128, 129, 139, 128, 140, 0, 141,
+ 0, 142, 0, 143, 0, 144, 0, 145,
+ 0, 146, 0, 148, 147, 150, 149, 150,
+ 151, 152, 153, 152, 154, 155, 156, 157,
+ 151, 149, 150, 158, 149, 150, 159, 149,
+ 150, 160, 149, 150, 161, 149, 150, 162,
+ 149, 150, 163, 149, 150, 164, 149, 150,
+ 165, 149, 150, 166, 149, 150, 167, 149,
+ 150, 168, 149, 150, 169, 149, 150, 170,
+ 149, 150, 171, 149, 150, 172, 149, 150,
+ 173, 149, 150, 174, 149, 150, 175, 149,
+ 150, 176, 149, 150, 177, 149, 150, 178,
+ 149, 150, 179, 149, 150, 180, 149, 150,
+ 181, 149, 150, 182, 149, 150, 183, 149,
+ 150, 184, 149, 150, 185, 149, 150, 186,
+ 149, 150, 187, 149, 150, 180, 149, 150,
+ 188, 149, 150, 189, 149, 150, 190, 149,
+ 150, 191, 149, 150, 192, 149, 150, 180,
+ 149, 150, 193, 149, 150, 194, 149, 150,
+ 195, 149, 150, 196, 149, 150, 197, 149,
+ 150, 198, 149, 150, 199, 149, 150, 200,
+ 181, 180, 149, 150, 201, 202, 149, 150,
+ 203, 149, 150, 204, 149, 150, 205, 149,
+ 150, 206, 149, 150, 192, 149, 150, 207,
+ 149, 150, 208, 149, 150, 209, 149, 150,
+ 210, 149, 150, 211, 149, 150, 192, 149,
+ 212, 0, 213, 0, 214, 0, 62, 0,
+ 215, 0, 216, 0, 217, 0, 218, 0,
+ 219, 0, 220, 0, 221, 0, 222, 223,
+ 124, 0, 224, 225, 0, 226, 0, 227,
+ 0, 228, 0, 229, 0, 230, 0, 231,
+ 0, 232, 0, 234, 233, 236, 235, 236,
+ 237, 238, 239, 240, 238, 241, 242, 243,
+ 244, 245, 246, 246, 237, 235, 236, 247,
+ 235, 236, 248, 235, 236, 249, 235, 236,
+ 250, 235, 236, 251, 235, 236, 252, 235,
+ 236, 253, 235, 236, 254, 235, 236, 255,
+ 235, 236, 256, 235, 236, 257, 235, 236,
+ 258, 235, 236, 259, 235, 236, 260, 235,
+ 236, 261, 235, 236, 262, 235, 236, 263,
+ 235, 236, 264, 235, 236, 263, 235, 236,
+ 265, 235, 236, 266, 235, 236, 267, 235,
+ 236, 268, 235, 236, 269, 235, 236, 270,
+ 235, 236, 261, 235, 236, 271, 235, 236,
+ 272, 235, 236, 273, 235, 236, 263, 235,
+ 236, 274, 235, 236, 275, 235, 236, 276,
+ 235, 236, 277, 235, 236, 278, 235, 236,
+ 279, 235, 236, 270, 235, 236, 272, 235,
+ 280, 0, 281, 0, 282, 0, 283, 0,
+ 284, 0, 230, 0, 286, 285, 288, 287,
+ 288, 289, 290, 291, 292, 290, 293, 294,
+ 295, 296, 297, 298, 298, 289, 287, 288,
+ 299, 287, 288, 300, 287, 288, 301, 287,
+ 288, 302, 287, 288, 303, 287, 288, 304,
+ 287, 288, 305, 287, 288, 306, 287, 288,
+ 307, 287, 288, 308, 287, 288, 309, 287,
+ 288, 310, 287, 288, 311, 287, 288, 312,
+ 287, 288, 313, 287, 288, 314, 287, 288,
+ 315, 287, 288, 316, 317, 287, 288, 318,
+ 287, 288, 319, 287, 288, 320, 287, 288,
+ 321, 287, 288, 322, 287, 288, 323, 287,
+ 288, 324, 287, 288, 325, 287, 288, 313,
+ 287, 288, 315, 287, 288, 326, 287, 288,
+ 327, 287, 288, 328, 287, 288, 329, 287,
+ 288, 330, 287, 288, 325, 287, 288, 331,
+ 287, 288, 332, 287, 288, 333, 287, 288,
+ 315, 287, 288, 334, 287, 288, 335, 287,
+ 288, 336, 287, 288, 337, 287, 288, 338,
+ 287, 288, 339, 287, 288, 340, 287, 288,
+ 341, 313, 287, 288, 342, 343, 287, 288,
+ 344, 287, 288, 345, 287, 288, 346, 287,
+ 288, 347, 287, 288, 330, 287, 288, 348,
+ 287, 288, 349, 287, 288, 350, 287, 288,
+ 351, 287, 288, 352, 287, 288, 330, 287,
+ 288, 332, 287, 213, 0, 353, 354, 353,
+ 0, 357, 356, 358, 359, 356, 355, 0,
+ 361, 362, 360, 0, 361, 360, 357, 363,
+ 361, 362, 363, 360, 357, 364, 365, 366,
+ 367, 368, 369, 370, 371, 372, 373, 374,
+ 375, 376, 376, 377, 364, 0, 77, 378,
+ 76, 77, 379, 76, 77, 380, 76, 77,
+ 379, 76, 77, 381, 76, 77, 382, 76,
+ 77, 383, 76, 77, 384, 76, 77, 385,
+ 76, 77, 386, 76, 77, 102, 76, 77,
+ 387, 76, 77, 388, 76, 77, 389, 76,
+ 77, 379, 76, 77, 390, 76, 77, 391,
+ 76, 77, 392, 76, 77, 393, 76, 77,
+ 394, 76, 77, 395, 76, 77, 396, 76,
+ 77, 397, 102, 76, 77, 398, 399, 76,
+ 77, 400, 76, 77, 401, 76, 77, 402,
+ 76, 77, 403, 76, 77, 385, 76, 77,
+ 404, 76, 77, 405, 76, 77, 406, 76,
+ 77, 407, 76, 77, 408, 76, 77, 385,
+ 76, 77, 388, 76, 62, 0, 409, 0,
+ 1, 0, 410, 0
+];
+
+const _lexer_trans_targs = [
+ 0, 2, 2, 3, 12, 14, 28, 31,
+ 34, 36, 65, 83, 150, 154, 279, 280,
+ 323, 4, 5, 6, 7, 7, 7, 8,
+ 7, 7, 7, 8, 9, 10, 11, 2,
+ 11, 12, 2, 13, 15, 16, 17, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 325, 29, 30, 30, 2, 13, 32,
+ 33, 2, 32, 31, 33, 35, 28, 37,
+ 322, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 47, 48, 48, 2,
+ 49, 63, 286, 288, 290, 297, 301, 321,
+ 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 2, 64, 2,
+ 2, 3, 12, 14, 28, 31, 34, 36,
+ 65, 83, 150, 154, 279, 280, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75,
+ 74, 75, 75, 2, 76, 77, 78, 79,
+ 80, 81, 82, 64, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 91, 92, 92,
+ 2, 93, 107, 117, 124, 130, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 2, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 64, 118, 119,
+ 120, 121, 122, 123, 125, 126, 127, 128,
+ 129, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 144, 140, 141, 142, 143, 145,
+ 146, 147, 148, 149, 151, 152, 153, 155,
+ 156, 157, 158, 159, 160, 161, 162, 217,
+ 163, 211, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 171, 172, 172, 2, 173,
+ 187, 188, 190, 192, 199, 203, 210, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 2, 64, 189, 187,
+ 191, 193, 194, 195, 196, 197, 198, 200,
+ 201, 202, 204, 205, 206, 207, 208, 209,
+ 212, 213, 214, 215, 216, 218, 219, 218,
+ 219, 219, 2, 220, 234, 235, 237, 248,
+ 254, 258, 278, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, 231, 232, 233,
+ 2, 64, 236, 234, 238, 247, 239, 240,
+ 241, 242, 243, 244, 245, 246, 249, 250,
+ 251, 252, 253, 255, 256, 257, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 272,
+ 268, 269, 270, 271, 273, 274, 275, 276,
+ 277, 280, 281, 282, 284, 285, 283, 281,
+ 282, 283, 281, 284, 285, 3, 12, 14,
+ 28, 31, 34, 36, 65, 83, 150, 154,
+ 279, 280, 287, 63, 289, 291, 292, 293,
+ 294, 295, 296, 298, 299, 300, 302, 303,
+ 304, 305, 306, 307, 308, 309, 310, 315,
+ 311, 312, 313, 314, 316, 317, 318, 319,
+ 320, 324, 0
+];
+
+const _lexer_trans_actions = [
+ 39, 0, 47, 3, 1, 0, 25, 1,
+ 25, 25, 25, 25, 25, 25, 25, 31,
+ 0, 0, 0, 47, 5, 41, 119, 41,
+ 0, 29, 111, 29, 29, 0, 7, 95,
+ 0, 0, 103, 21, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 50, 0, 99, 19, 0,
+ 23, 107, 23, 44, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 50, 124, 0, 47, 0, 65,
+ 29, 77, 77, 77, 77, 77, 77, 77,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 11, 11, 27,
+ 115, 53, 50, 27, 56, 50, 56, 56,
+ 56, 56, 56, 56, 56, 59, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 124,
+ 0, 47, 0, 74, 77, 0, 0, 0,
+ 0, 0, 0, 17, 0, 0, 0, 0,
+ 0, 0, 0, 50, 124, 0, 47, 0,
+ 62, 29, 77, 77, 77, 77, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 50, 124, 0, 47, 0, 71, 29,
+ 77, 77, 77, 77, 77, 77, 77, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 15, 15, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 50, 124, 0,
+ 47, 0, 68, 29, 77, 77, 77, 77,
+ 77, 77, 77, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 13, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 33, 33, 47, 33, 80,
+ 0, 0, 35, 0, 0, 86, 83, 37,
+ 89, 83, 89, 89, 89, 89, 89, 89,
+ 89, 92, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0
+];
+
+const _lexer_eof_actions = [
+ 0, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39, 39, 39,
+ 39, 39, 39, 39, 39, 39
+];
+
+const lexer_start = 1;
+const lexer_first_final = 325;
+const lexer_error = 0;
+
+const lexer_en_main = 1;
+
+
+/* line 120 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+/* line 121 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+/* line 122 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+var Lexer = function(listener) {
+ // Check that listener has the required functions
+ var events = ['comment', 'tag', 'feature', 'background', 'scenario', 'scenario_outline', 'examples', 'step', 'py_string', 'row', 'eof'];
+ for(e in events) {
+ var event = events[e];
+ if(typeof listener[event] != 'function') {
+ "Error. No " + event + " function exists on " + JSON.stringify(listener);
+ }
+ }
+ this.listener = listener;
+};
+
+Lexer.prototype.scan = function(data) {
+ var ending = "\n%_FEATURE_END_%";
+ if(typeof data == 'string') {
+ data = this.stringToBytes(data + ending);
+ } else if(typeof Buffer != 'undefined' && Buffer.isBuffer(data)) {
+ // Node.js
+ var buf = new Buffer(data.length + ending.length);
+ data.copy(buf, 0, 0);
+ new Buffer(ending).copy(buf, data.length, 0);
+ data = buf;
+ }
+ var eof = pe = data.length;
+ var p = 0;
+
+ this.line_number = 1;
+ this.last_newline = 0;
+
+
+/* line 633 "js/lib/gherkin/lexer/i18n/en.js" */
+{
+ this.cs = lexer_start;
+} /* JSCodeGen::writeInit */
+
+/* line 153 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+/* line 640 "js/lib/gherkin/lexer/i18n/en.js" */
+{
+ var _klen, _trans, _keys, _ps, _widec, _acts, _nacts;
+ var _goto_level, _resume, _eof_trans, _again, _test_eof;
+ var _out;
+ _klen = _trans = _keys = _acts = _nacts = null;
+ _goto_level = 0;
+ _resume = 10;
+ _eof_trans = 15;
+ _again = 20;
+ _test_eof = 30;
+ _out = 40;
+ while (true) {
+ _trigger_goto = false;
+ if (_goto_level <= 0) {
+ if (p == pe) {
+ _goto_level = _test_eof;
+ continue;
+ }
+ if ( this.cs == 0) {
+ _goto_level = _out;
+ continue;
+ }
+ }
+ if (_goto_level <= _resume) {
+ _keys = _lexer_key_offsets[ this.cs];
+ _trans = _lexer_index_offsets[ this.cs];
+ _klen = _lexer_single_lengths[ this.cs];
+ _break_match = false;
+
+ do {
+ if (_klen > 0) {
+ _lower = _keys;
+ _upper = _keys + _klen - 1;
+
+ while (true) {
+ if (_upper < _lower) { break; }
+ _mid = _lower + ( (_upper - _lower) >> 1 );
+
+ if ( data[p] < _lexer_trans_keys[_mid]) {
+ _upper = _mid - 1;
+ } else if ( data[p] > _lexer_trans_keys[_mid]) {
+ _lower = _mid + 1;
+ } else {
+ _trans += (_mid - _keys);
+ _break_match = true;
+ break;
+ };
+ } /* while */
+ if (_break_match) { break; }
+ _keys += _klen;
+ _trans += _klen;
+ }
+ _klen = _lexer_range_lengths[ this.cs];
+ if (_klen > 0) {
+ _lower = _keys;
+ _upper = _keys + (_klen << 1) - 2;
+ while (true) {
+ if (_upper < _lower) { break; }
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( data[p] < _lexer_trans_keys[_mid]) {
+ _upper = _mid - 2;
+ } else if ( data[p] > _lexer_trans_keys[_mid+1]) {
+ _lower = _mid + 2;
+ } else {
+ _trans += ((_mid - _keys) >> 1);
+ _break_match = true;
+ break;
+ }
+ } /* while */
+ if (_break_match) { break; }
+ _trans += _klen
+ }
+ } while (false);
+ _trans = _lexer_indicies[_trans];
+ this.cs = _lexer_trans_targs[_trans];
+ if (_lexer_trans_actions[_trans] != 0) {
+ _acts = _lexer_trans_actions[_trans];
+ _nacts = _lexer_actions[_acts];
+ _acts += 1;
+ while (_nacts > 0) {
+ _nacts -= 1;
+ _acts += 1;
+ switch (_lexer_actions[_acts - 1]) {
+case 0:
+/* line 6 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.content_start = p;
+ this.current_line = this.line_number;
+ this.start_col = p - this.last_newline - (this.keyword+':').length;
+ break;
+case 1:
+/* line 12 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.current_line = this.line_number;
+ this.start_col = p - this.last_newline;
+ break;
+case 2:
+/* line 17 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.content_start = p;
+ break;
+case 3:
+/* line 21 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ var con = this.unindent(
+ this.start_col,
+ this.bytesToString(data.slice(this.content_start, this.next_keyword_start-1)).replace(/(\r?\n)?([\t ])*$/, '').replace(/\\\"\\\"\\\"/mg, '"""')
+ );
+ this.listener.py_string(con, this.current_line);
+ break;
+case 4:
+/* line 29 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ p = this.store_keyword_content('feature', data, p, eof);
+ break;
+case 5:
+/* line 33 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ p = this.store_keyword_content('background', data, p, eof);
+ break;
+case 6:
+/* line 37 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ p = this.store_keyword_content('scenario', data, p, eof);
+ break;
+case 7:
+/* line 41 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ p = this.store_keyword_content('scenario_outline', data, p, eof);
+ break;
+case 8:
+/* line 45 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ p = this.store_keyword_content('examples', data, p, eof);
+ break;
+case 9:
+/* line 49 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ var con = this.bytesToString(data.slice(this.content_start, p)).trim();
+ this.listener.step(this.keyword, con, this.current_line);
+ break;
+case 10:
+/* line 54 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ var con = this.bytesToString(data.slice(this.content_start, p)).trim();
+ this.listener.comment(con, this.line_number);
+ this.keyword_start = null;
+ break;
+case 11:
+/* line 60 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ var con = this.bytesToString(data.slice(this.content_start, p)).trim();
+ this.listener.tag(con, this.line_number);
+ this.keyword_start = null;
+ break;
+case 12:
+/* line 66 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.line_number++;
+ break;
+case 13:
+/* line 70 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.last_newline = p + 1;
+ break;
+case 14:
+/* line 74 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.keyword_start = this.keyword_start || p;
+ break;
+case 15:
+/* line 78 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.keyword = this.bytesToString(data.slice(this.keyword_start, p)).replace(/:$/, '');
+ this.keyword_start = null;
+ break;
+case 16:
+/* line 83 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.next_keyword_start = p;
+ break;
+case 17:
+/* line 87 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ p = p - 1;
+ current_row = [];
+ this.current_line = this.line_number;
+ break;
+case 18:
+/* line 93 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.content_start = p;
+ break;
+case 19:
+/* line 97 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ var con = this.bytesToString(data.slice(this.content_start, p)).trim();
+ current_row.push(con.replace(/\\\|/, "|").replace(/\\n/, "\n").replace(/\\\\/, "\\"));
+ break;
+case 20:
+/* line 102 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ this.listener.row(current_row, this.current_line);
+ break;
+case 21:
+/* line 106 "/Users/ahellesoy/scm/gherkin/tasks/../ragel/i18n/en.js.rl" */
+
+ if(this.cs < lexer_first_final) {
+ var content = this.current_line_content(data, p);
+ throw "Lexing error on line " + this.line_number + ": '" + content + "'. See http://wiki.github.com/aslakhellesoy/gherkin/lexingerror for more information.";
+ } else {
+ this.listener.eof();
+ }
+
+ break;
+/* line 856 "js/lib/gherkin/lexer/i18n/en.js" */
+ } /* action switch */
+ }
+ }
+ if (_trigger_goto) {
+ continue;
+ }
+ }
+ if (_goto_level <= _again) {
+ if ( this.cs == 0) {
+ _goto_level = _out;